jpw*_*ynn 141 ruby arrays sorting
我有一个数组,其每个元素都是一个带有三个键/值对的哈希:
:phone => "2130001111", :zip => "12345", :city => "sometown"
Run Code Online (Sandbox Code Playgroud)
我想对数据进行排序,zip
因此phone
同一区域中的所有s都在一起.Ruby有一个简单的方法吗?可以will_paginate
在数组中分页数据吗?
Gar*_*eth 351
Simples:
array_of_hashes.sort_by { |hsh| hsh[:zip] }
Run Code Online (Sandbox Code Playgroud)
注意:
使用时,sort_by
您需要将结果分配给新变量:array_of_hashes = array_of_hashes.sort_by{}
否则您可以使用"bang"方法进行适当修改:array_of_hashes.sort_by!{}
Edu*_*Edu 17
sorted = dataarray.sort {|a,b| a[:zip] <=> b[:zip]}
Run Code Online (Sandbox Code Playgroud)
Die*_*o D 10
使用bang来修改数组:
array_of_hashes.sort_by!(&:zip)
Run Code Online (Sandbox Code Playgroud)
或重新分配:
array_of_hashes = array_of_hashes.sort_by(&:zip)
Run Code Online (Sandbox Code Playgroud)
请注意,sort_by方法将按升序排序.
如果您需要按降序排序,您可以执行以下操作:
array_of_hashes.sort_by!(&:zip).reverse!
Run Code Online (Sandbox Code Playgroud)
要么
array_of_hashes = array_of_hashes.sort_by(&:zip).reverse
Run Code Online (Sandbox Code Playgroud)
如果您将嵌套哈希(哈希格式内的哈希)作为数组元素(如下所示的结构)并希望按键(此处为日期)对其进行排序
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
}
}
]
Run Code Online (Sandbox Code Playgroud)
使用数组“sort_by”方法作为
data.sort_by { |element| element.keys.first }
Run Code Online (Sandbox Code Playgroud)