我有一个哈希数组,排序应该相当简单,但由于我对ruby还很陌生,而且还在研究文档,所以我在排序一个哈希时遇到了一些问题,这个哈希值很少有键值组合,但需要根据多个键值进行排序。

[{:attr1 => 3, :attr2 => 'test', attr3 => 'test2'},
{:attr1 => 1, :attr2 => 'test', attr3 => nil},
{:attr1 => 1, :attr2 => 'test', attr3 => 'test3'},
{:attr1 => 2, :attr2 => 'test', attr3 => 'test3'}]

所以我想按惯例分类。自定义规则首先查看attr1并按其降序排序。
如果有相同的attr1值,但其中一个attr3值是nil值,则最后订购nil值。
所以我想我需要创建自定义比较器,或者不创建。我怎么能用最少的痛苦做到这一点?
如果要对其进行排序,它将如下所示:
[{:attr1 => 3, :attr2 => 'test', attr3 => 'test2'},
    {:attr1 => 2, :attr2 => 'test', attr3 => 'test3'},
    {:attr1 => 1, :attr2 => 'test', attr3 => 'test3'},
    {:attr1 => 1, :attr2 => 'test', attr3 => nil}
]

最佳答案

array.sort_by{|h| [-h[:attr1], h[:attr3].nil?? 1 : 0]}

10-08 04:27