在golang中对降序结构进行排序

时间:2015-03-16 10:49:21

标签: xml sorting struct go

请参阅this playground。我想要的是安静简单:我想对所有"记录进行排序"降。我无法弄清楚如何。原因是我的结构包含一个或多个记录,我不知道如何处理它。 (f.e. this工作正常)

2 个答案:

答案 0 :(得分:5)

your example开始,您尝试对根元素<records>进行排序,而不是对子元素<record>进行排序。

This example效果更好,有:

  • type ById []Record
  • sort.Sort(sort.Reverse(ById(records.Records)))

您的Len()Swap()Less()方法保持不变,但将Record实例用作接收者,而不是Records

输出:

{{ records} 
  [{{ record} 64321 http://golang.com} 
   {{ record} 3456 http://www.lommers.org/sampleurl} 
   {{ record} 4 http://www.this-is-my-url.com}]} 

正如我在&#34; How to avoid re-implementing sort.Interface for similar golang structs&#34;中提到的那样,这改变了Go 1.8和commit ad26bb5

您只定义Less()匿名lambda

a := ById(records.Records)
sort.Slice(a, func(i, j int) bool {
    return a[i] > a[j]
})

答案 1 :(得分:3)

如果您的sort.Interface实现按升序排序,则可以使用sort.Reverse函数生成将反向排序的版本。

因此,如果data实施sort.Interface并且您有一个如下调用:

sort.Sort(data)

然后您可以通过将其更改为:

切换到降序
sort.Sort(sort.Reverse(data))

在内部,由sort.Reverse返回的排序器只是代理sort.Interface方法直接调用,但Less除外,它会切换两个参数。