go - 按 slice 字段排序

标签 go

我有以下结构:

type Parent struct {
    id       string
    children []Child
}

type Child struct {
    id string
}

我用以下值制作了 Parents 的一部分:

parents := make([]Parent, 0)

p1 := Parent {
    "3",
    []Child {
        {"2"},
        {"3"},
        {"1"},
    },
}

p2 := Parent {
    "1",
    []Child {
        {"8"},
        {"9"},
        {"7"},
    },
}

p3 := Parent {
    "2",
    []Child {
        {"5"},
        {"6"},
        {"4"},
    },
}             

parents = append(parents, p1, p2, p3)

我正在尝试按以下顺序对“ parent ” slice 进行排序:

1) First, sort all Parents by Parent.id

2) Next, sort each Parent's "children" slice by Child.id

预期的结果是这样的:

[{1 [{7} {8} {9}]} {2 [{4} {5} {6}]} {3 [{1} {2} {3}]}]

有没有办法在 Go 中做到这一点?

最佳答案

我使用以下代码让它工作:

// sort each Parent in the parents slice by Id
sort.Slice(parents, func(i, j int) bool {return parents[i].id < parents[j].id})

// for each Parent, sort each Child in the children slice by Id
for _, parent := range parents {
    sort.Slice(parent.children, func(i, j int) bool {return parent.children[i].id < parent.children[j].id})
}

特别感谢@Volker 提到sort.Slice 函数!我不知道它的存在!

关于go - 按 slice 字段排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43316154/

相关文章:

json - 如何在 GO 中包含一个数组作为结构定义的一部分?

data-structures - 有没有类似 BidiMap 的东西?

godep save ./... 似乎不适用于 https ://github. com/hashicorp/terraform

Golang 异步和 CPU 使用率

go - 简明地深复制一片?

go - 如何在GO中的多返回函数中只返回一个变量?

go - 如果我在 gin 中使用多个中间件,它们的执行顺序是什么

go - 如何反转字符串中每个字母的大小写?

go - 无需接口(interface)即可将多种类型合二为一

go - 如何在Go中通过名称设置结构字段的复合字段?