golang之判断元素是否在数组内问题
作者:我的猫叫土豆
这篇文章主要介绍了golang之判断元素是否在数组内问题,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
golang判断元素是否在数组内
众所周知,golang里没有像python的in来判断元素是否在list里存在,可替代的办法是将list放到map里,在map里判断元素是否存在
// 已知list中元素"amber","jack" arr := [...]string{"amber","jack"} // 初始化map var set map[string]struct{} set = make(map[string]struct{}) // 上面2部可替换为set := make(map[string]struct{}) // 将list内容传递进map,只根据key判断,所以不需要关心value的值,用struct{}{}表示 for _, value := range arr{ set[value] = struct{}{} } // 检查元素是否在map if _, ok := set["amber"];ok { fmt.Println("amber is in the list") } else { fmt.Println("amber is not in the list") }
golang判断一个目标元素是否在目标数组中
- 目标数组只能包含整形、字符串、布尔类型等基本类型
- 目标元素只能包含整形、字符串、布尔类型等基本类型
- 非interface数组需要先转换为对于的interface数组
- 其余基本类型的转换按思想实现即可
import "reflect" func FolatArray2Interface(array []float32) []interface{} { var goalArray []interface{} for _, value := range array { goalArray = append(goalArray, value) } return goalArray } func IntArray2Interface(array []int) []interface{} { var goalArray []interface{} for _, value := range array { goalArray = append(goalArray, value) } return goalArray } func StringArray2Interface(array []string) []interface{} { var goalArray []interface{} for _, value := range array { goalArray = append(goalArray, value) } return goalArray } func InArray(array []interface{}, element interface{}) bool { // 实现查找整形、string类型和bool类型是否在数组中 if element == nil || array == nil { return false } for _, value := range array { // 首先判断类型是否一致 if reflect.TypeOf(value).Kind() == reflect.TypeOf(element).Kind() { // 比较值是否一致 if value == element { return true } } } return false }
总结
以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。