登录
首页 >  Golang >  Go问答

合并重复值的切片

来源:stackoverflow

时间:2024-02-18 22:27:24 240浏览 收藏

今天golang学习网给大家带来了《合并重复值的切片》,其中涉及到的知识点包括等等,无论你是小白还是老手,都适合看一看哦~有好的建议也欢迎大家在评论留言,若是看完有所收获,也希望大家能多多点赞支持呀!一起加油学习~

问题内容

我的汽车结构具有以下结构:

type car struct {
    name      string
    factories []string
}

我有一片汽车结构,如下所示:

cars := []car{
     {
         name: "sample-car"
         factories: []string{"factory-1"}
     },
     {
         name: "fast-car"
         factories: []string{"factory-1"}
     },
     {
         name: "sample-car"
         factories: []string{"factory-2"}
     },
 }

我需要通过保留两个工厂的名称来合并重复的汽车

cars := []car{
     {
         name: "sample-car"
         factories: []string{"factory-1", "factory-2"}
     },
     {
         name: "fast-car"
         factories: []string{"factory-1"}
     },
 }

如何获得上述输出?

编辑:我尝试这个,但这是删除一个工厂,我想要合并工厂

m := make(map[int]bool)
uniqueCar := make([]Car, 0, len(cars))

for _, car := range cars {
    if _, ok := m[car.Name]; !ok {
        m[car.Name] = true
        uniqueCar = append(uniqueCar, val)
    }
}

return uniqueCar

解决方案


你已经非常接近了,但是你忘了附加工厂本身:

m := make(map[string]Car)

for _, car := range cars {
    if v, ok := m[car.Name]; !ok {
        m[car.Name] = car
    } else {
        v.Factories = append(v.Factories, car.Factories)
        m[car.Name] = v
    }
}

uniqueCars = make([]Car, len(m))
for i, car := range m {
    uniqueCars[i] = car
}

如果您的输入中可能出现重复的汽车/工厂组合,并且您不希望输出中出现重复的工厂,您将需要做更多的欺骗。如果你想让汽车保持原来的顺序,你还需要做更多的欺骗。

今天关于《合并重复值的切片》的内容介绍就到此结束,如果有什么疑问或者建议,可以在golang学习网公众号下多多回复交流;文中若有不正之处,也希望回复留言以告知!

声明:本文转载于:stackoverflow 如有侵犯,请联系study_golang@163.com删除
相关阅读
更多>
最新阅读
更多>
课程推荐
更多>