Answers:
简单:
array_of_hashes.sort_by { |hsh| hsh[:zip] }
注意:
使用时sort_by
,需要将结果分配给新变量:array_of_hashes = array_of_hashes.sort_by{}
否则,可以使用“ bang”方法在适当位置进行修改:array_of_hashes.sort_by!{}
sort_by
,需要将结果分配给新变量:array_of_hashes = array_of_hashes.sort_by{}
否则,您可以使用“ bang”方法进行修改:array_of_hashes.sort_by!{}
array_of_hashes.sort_by(&:zip)
.sort_by { |hsh| hsh.zip }
,因此只有.zip
在每个Hash上都将其定义为方法时,它才有效。默认情况下,哈希不会将其键公开为方法,因此我想您可能还有其他事情在进行。
array_of_hashes.sort_by!(&:zip)
.zip
并且[:zip]
两者都可以胜任。ActiveRecords都定义了两种样式。
使用bang修改数组的位置:
array_of_hashes.sort_by!(&:zip)
或重新分配:
array_of_hashes = array_of_hashes.sort_by(&:zip)
请注意,sort_by方法将按升序排序。
如果需要按降序排序,可以执行以下操作:
array_of_hashes.sort_by!(&:zip).reverse!
要么
array_of_hashes = array_of_hashes.sort_by(&:zip).reverse
&:
是的捷径method
,而不是attribute
!你是假设散列具有反射属性的方法..
reverse
方法:p
如果您将嵌套哈希(哈希格式中的哈希)作为数组元素(如下结构)并想按键对其进行排序(此处为日期)
data = [
{
"2018-11-13": {
"avg_score": 4,
"avg_duration": 29.24
}
},
{
"2017-03-13": {
"avg_score": 4,
"avg_duration": 40.24
}
},
{
"2018-03-13": {
"avg_score": 4,
"avg_duration": 39.24
}
}
]
使用数组“ sort_by”方法作为
data.sort_by { |element| element.keys.first }
[city,zip]=>phone
或使其成为哈希city=>{zip1=>[<phones>], zip2=>...}
。