dongqiyou0303 2017-04-10 06:19
浏览 749
已采纳

Golang:按切片字段排序

I have the following Structs:

type Parent struct {
    id       string
    children []Child
}

type Child struct {
    id string
}

I have made a slice of Parents with the following values:

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)

I am trying to sort the "parents" slice in the following order:

1) First, sort all Parents by Parent.id

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

The expected result is something like:

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

Is there a way to do this in Go?

  • 写回答

1条回答 默认 最新

  • dsqtl335227 2017-04-10 07:05
    关注

    I got it to work using the following code:

    // 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})
    }
    

    Special thanks to @Volker for mentioning the sort.Slice function! I had no idea it existed!

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

悬赏问题

  • ¥15 在若依框架下实现人脸识别
  • ¥15 网络科学导论,网络控制
  • ¥100 安卓tv程序连接SQLSERVER2008问题
  • ¥15 利用Sentinel-2和Landsat8做一个水库的长时序NDVI的对比,为什么Snetinel-2计算的结果最小值特别小,而Lansat8就很平均
  • ¥15 metadata提取的PDF元数据,如何转换为一个Excel
  • ¥15 关于arduino编程toCharArray()函数的使用
  • ¥100 vc++混合CEF采用CLR方式编译报错
  • ¥15 coze 的插件输入飞书多维表格 app_token 后一直显示错误,如何解决?
  • ¥15 vite+vue3+plyr播放本地public文件夹下视频无法加载
  • ¥15 c#逐行读取txt文本,但是每一行里面数据之间空格数量不同