我有一个数组,其每个元素都是一个带有三个键/值对的散列:
:phone => "2130001111", :zip => "12345", :city => "sometown"
我想按zip
对数据进行排序,以便同一区域内的所有phone
都在一起。 Ruby有一个简单的方法吗?可以will_paginate
对数组中的数据进行分页吗?
答案 0 :(得分:328)
Simples:
array_of_hashes.sort_by { |hsh| hsh[:zip] }
注意:强>
使用sort_by
时,您需要将结果分配给新变量:array_of_hashes = array_of_hashes.sort_by{}
否则您可以使用“bang”方法进行适当修改:array_of_hashes.sort_by!{}
答案 1 :(得分:17)
sorted = dataarray.sort {|a,b| a[:zip] <=> b[:zip]}
答案 2 :(得分:8)
使用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
答案 3 :(得分:4)
如果你想为数组中的数据分页,你应该在控制器中要求'will_paginate / array'
答案 4 :(得分:1)
如果您将嵌套哈希(散列格式内的哈希)作为数组元素(如下所示的结构)并希望按键排序(此处为日期)
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 }