请参阅this playground。我想要的是安静简单:我想对所有"记录进行排序"降。我无法弄清楚如何。原因是我的结构包含一个或多个记录,我不知道如何处理它。 (f.e. this工作正常)
答案 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
除外,它会切换两个参数。