go - 如何删除接口数组中的重复项
问题描述
假设输入可以包含字符串或整数值
names = ["rahul", "rohit","srujan", "rahul"] --> output = ["rahul", "rohit","srujan"]
age=[12,18,12,21] --> output = [12,18,21]
我们可以利用这个功能来过滤重复
package main
import (
"fmt"
)
func unique(intSlice []int) []int {
keys := make(map[int]bool)
list := []int{}
for _, entry := range intSlice {
if _, value := keys[entry]; !value {
keys[entry] = true
list = append(list, entry)
}
}
return list
}
func main() {
intSlice := []int{1,5,3,6,9,9,4,2,3,1,5}
fmt.Println(intSlice)
uniqueSlice := unique(intSlice)
fmt.Println(uniqueSlice)
}
这仅在输入是字符串或整数而不是两者时才有效 如何确保此函数适用于数组接口
解决方案
如何确保此函数适用于(未排序的)空接口切片{}
考虑到空接口{}具有可比性(https://stackoverflow.com/a/54003329/4466350)
因此,要回答您的问题,重写原始代码非常简单
package main
import (
"fmt"
)
func main() {
intSlice := []interface{}{1, 5, 3, 6, 9, 9, 4, 2, 3, 1, 5}
fmt.Println(unique(intSlice))
}
func unique(src []interface{}) []interface{} {
keys := make(map[interface{}]bool)
list := []interface{}{}
for _, entry := range src {
if _, value := keys[entry]; !value {
keys[entry] = true
list = append(list, entry)
}
}
return list
}
https://play.golang.org/p/vW7vgwz9yc1
如果您的问题变成,如何删除任何切片类型的重复项,请查看其他答案https://stackoverflow.com/a/65191679/4466350
推荐阅读
- flutter - 使用 typeahead 进行颤振搜索
- html - 如何防止 li 文本进入按钮下方
- jags - 有没有办法在 rjags 中保存每 100 次迭代的输出?
- ruby-on-rails - debase gem 在安装时在我面前爆炸
- java - 引用不同文件中的 avro 模式不起作用 - avro 引发错误
- flutter - 颤振我正在尝试向我的应用程序添加一个 tabbarview,但没有任何效果,我想要一个标签来显示来自巴西和另一个来自世界的案例
- unity3d - 如何实时变形蒙皮网格?
- mongodb - MongoDB 分片和复制
- python - 为什么我在 pyhton 统计信息中得到一个“int”对象不可迭代错误?
- python - 如何使用包含引号并使用多个分隔符的 pandas 读取 CSV 文件