为了账号安全,请及时绑定邮箱和手机立即绑定

从结构片段中删除具有重复字段值的结构

从结构片段中删除具有重复字段值的结构

Go
沧海一幻觉 2022-07-11 17:13:16
  我有一片结构,每个结构都有两个字段。如果仅在第一个字段中存在重复值,我想从切片中删除一个结构。我尝试在循环、映射和排序中使用循环,但我无法弄清楚。如果两个字段与另一个结构具有相同的值,我最接近的是从切片中删除一个结构,但如果第一个字段与切片中的另一个结构具有相同的值,我需要删除它。当结构中的所有字段都具有相同的值时,网上有很多这样的例子,但我没有找到任何我正在描述的情况。我正在处理的实际程序要复杂得多,它需要我使用一片结构。我在下面做了一个简化的例子,它触及了问题的核心。它输出[{one 1} {one 2} {five 5}]所需的输出是[{one 1} {five 5}]预先感谢您的帮助。import "fmt"type myKey struct {    key string    num int}type myKeysList []myKeyfunc remDupKeys(m myKeysList) myKeysList {    keys := make(map[myKey]bool)    list := myKeysList{}    for _, entry := range m {        if _, value := keys[entry]; !value {            keys[entry] = true            list = append(list, entry)        }    }    return list}func main() {    one := myKey{"one", 1}    two := myKey{"one", 1}    three := myKey{"one", 2}    four := myKey{"one", 1}    five := myKey{"five", 5}    myKeysList := myKeysList{one, two, three, four, five}    fmt.Println(myKeysList)    uList := remDupKeys(myKeysList)    fmt.Println(uList)}去游乐场链接https://play.golang.org/p/x8sNjW_mxrl
查看完整描述

1 回答

?
婷婷同学_

TA贡献1844条经验 获得超8个赞

问题中的基本思想是正确的:在地图中记录访问过的值并跳过地图中已经存在的值。


要基于结构中的单个字段删除重复项,请使用该字段作为映射键:


func remDupKeys(m myKeysList) myKeysList {

    keys := make(map[string]bool)

    list := myKeysList{}

    for _, entry := range m {

        if _, ok := keys[entry.key]; !ok {

            keys[entry.key] = true

            list = append(list, entry)

        }

    }

    return list

}


查看完整回答
反对 回复 2022-07-11
  • 1 回答
  • 0 关注
  • 85 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信