【发布时间】:2019-11-22 06:32:16
【问题描述】:
我需要从多个数组创建一个数组。新数组必须只包含传入的所有数组中存在的值。例如。
array1 := []string{"hello", "germany", "brasil", "fiji"}
array2 := []string{"goodbye", "germany", "brasil", "fiji"}
array3 := []string{"hello", "brasil", "fiji"}
array4 := []string{"hello", "brasil", "fiji", "usa"}
func mergeArrays(arrs ...[]string) []string{
// process arrays
}
myNewArray := mergeArrays(array1,array2,array3,array4)
fmt.Println(myNewArray) // ["fiji", "brasil"]
该示例应返回 ["fiji", "brasil"],因为它们是所有数组中唯一存在的值。
我该如何编写一个可以在 golang 中实现这样一个目标的函数?
这是我的尝试,但感觉有点笨拙
func mergeArrays(arrs ...[]string) []string {
var finalArr []string
if len(arrs) == 0 {
return finalArr
}
for i, a := range arrs {
if i == 0 {
finalArr = arrs[0]
continue
}
for i, e := range finalArr {
if !strContains(a, e) {
finalArr = append(finalArr[:i], finalArr[i+1:]...)
}
}
}
return finalArr
}
func strContains(s []string, e string) bool {
for _, a := range s {
if a == e {
return true
}
}
return false
}
【问题讨论】:
-
你试过了吗?您可以尝试一下吗?
-
@Adrian 更新问题以展示我尝试过的工作
-
@g4s8 我觉得我的用例有点不同
-
使用 go
map跟踪唯一条目。使用第一个切片填充“主”映射(注意我使用了术语 slice 而不是数组 - 因为数组具有固定的不可变大小 - 您正在使用切片)。然后迭代剩余的切片,基于该切片创建单独的地图。通过此迭代主映射从主映射中删除不在此单独映射中的任何键。 Rince & 重复。最后输出剩余主映射键的切片 - 这将是所有切片共有的单词集。
标签: go