我有一个哈希数组,排序应该相当简单,但由于我对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]}