您好, 欢迎来到 !    登录 | 注册 | | 设为首页 | 收藏本站

在Go Slice或数组中查找唯一项

在Go Slice或数组中查找唯一项

您的代码中存在多个错误。最严重的是,由于您要将visited切片的每个特定元素与的 元素进行比较unique,因此如果unique包含至少一个不同的元素,最终将附加它。而且,如果由于unique内部for循环不会“中断” 而有更多不同的元素,您将最终多次追加它。这是不是你想要的,你要追加相等于元素 的unique

还要注意,struct如果Go中的每个字段都是可比较的,则a in可比较。由于您的visit结构仅包含2个int字段,因此具有可比性,因此您可以visit简单地将type的值与==运算符进行比较,而不必太丑陋reflect.DeepEqual()。请参见规格:比较运算符

如果结构的所有字段都是可比较的,则它们的值是可比较的。如果两个结构值对应的非空白字段相等,则它们相等。

这是适用您逻辑的简化正确版本:

visited := []visit{
    visit{1, 100},
    visit{2, 2},
    visit{1, 100},
    visit{1, 1},
}
var unique []visit

for _, v := range visited {
    skip := false
    for _, u := range unique {
        if v == u {
            skip = true
            break
        }
    }
    if !skip {
        unique = append(unique, v)
    }
}

fmt.Println(unique)

输出(在Go Playground上尝试):

[{1 100} {2 2} {1 1}]
Go 2022/1/1 18:18:49 有450人围观

撰写回答


你尚未登录,登录后可以

和开发者交流问题的细节

关注并接收问题和回答的更新提醒

参与内容的编辑和改进,让解决方法与时俱进

请先登录

推荐问题


联系我
置顶