【发布时间】:2020-06-20 00:20:12
【问题描述】:
问题如标题所述。给定两个已知类型的列表,而您只是想确保两个列表没有使用任何相同的元素,那么如何在 golang 中有效地检查呢?
对于 golang 来说还是比较新的。在 Python 中,我可能会这样做:
a = [1, 2, 3]
b = [4, 5, 6]
c = [7, 8, 1]
def check_lists_are_unique(list_one, list_two):
return not bool(len(set(list_one) & set(list_two)))
print(check_lists_are_unique(a, b)) # returns True
print(check_lists_are_unique(a, c)) # returns False
print(check_lists_are_unique(b, c)) # returns True
我自己在 golang 中天真的第一次尝试是:
a := []int{1, 2, 3}
b := []int{4, 5, 6}
c := []int{7, 8, 1}
checkUnique := func(listOne, listTwo []int) bool {
for _, i := range listOne {
for _, j := range listTwo {
if i == j {
return false
}
}
}
return true
}
fmt.Println(checkUnique(a, b)) // returns true
fmt.Println(checkUnique(a, c)) // returns false
fmt.Println(checkUnique(b, c)) // returns true
https://play.golang.org/p/vuBnv97MyWb
想知道这是否真的是在 golang 中进行这种比较的最有效方法?在 golang 中进行这种比较是否有替代方案或更“正确”的方式?
额外说明:还想听听任何酷/创意/古怪的方式,这些方式都是独一无二的 golang-ish。
【问题讨论】:
-
这是在大多数情况下和语言(代码行数!= 效率)中最有效的方法。 Go 不提倡“创意”或“古怪”。如果您想检查具有基本类型的较大集合中的成员资格,请使用地图。
-
我建议使用地图然后你可以附加地图