目录

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
}

总结

以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。

您可能感兴趣的文章: