gpt4 book ai didi

arrays - 检查两个数组是否具有相同成员的最佳方法

转载 作者:IT王子 更新时间:2023-10-29 02:28:35 24 4
gpt4 key购买 nike

我有一个字符串数组,我需要将它与另一个字符串数组进行比较,但它们的顺序可能不同。比较这两个数组的最佳方法是什么?

这就是我目前所拥有的,只是想知道我是否缺少一种更简单/更有效的方法。

func unorderedEqual(first, second []string) bool {
if len(first) != len(second) {
return false
}
for _, value := range first {
if !contains(value, second) {
return false
}
}
return true
}

func contains(needle string, haystack []string) bool {
for _, matchValue := range haystack {
if matchValue == needle {
return true
}
}
return false
}

最佳答案

鉴于您正在进行长度检查,我将假设它们是 1:1,只是顺序不同。

您可以使用 map[string]bool 在一次传递(每次)中执行此操作以检查两者是否存在。这利用了 map 在 key 不存在时返回 bool 的零值这一事实,即 false

免责声明:从技术上讲,这是 O(n)*O(map) 的顺序。 Go Programming Language Specification不对 map 类型做任何性能保证。

https://play.golang.org/p/2LUjN5LkXLL

func unorderedEqual(first, second []string) bool {
if len(first) != len(second) {
return false
}
exists := make(map[string]bool)
for _, value := range first {
exists[value] = true
}
for _, value := range second {
if !exists[value] {
return false
}
}
return true
}

如果你想对内存使用挑剔,你可以通过使用 map[string]struct{}(空结构),您只需稍微不同地检查是否存在,如本例所示。

https://play.golang.org/p/MjwP_wCtYZV

设置

exists[value] = struct{}{}

检查

if _, ok := exists[value]; !ok {
return false
}

关于arrays - 检查两个数组是否具有相同成员的最佳方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52395494/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com