如何在 Ruby 中对散列数组进行排序

我有一个数组,它的每个元素都是一个散列,有三个键/值对:

:phone => "2130001111", :zip => "12345", :city => "sometown"

我想把数据按 zip排序,这样同一区域的所有 phone都在一起。Ruby 有什么简单的方法吗?will_paginate可以对数组中的数据进行分页吗?

105002 次浏览

简单来说:

array_of_hashes.sort_by { |hsh| hsh[:zip] }

注:

当使用 sort_by时,您需要将结果赋给一个新变量: array_of_hashes = array_of_hashes.sort_by{},否则您可以使用“ bang”方法在适当的位置修改: array_of_hashes.sort_by!{}

sorted = dataarray.sort {|a,b| a[:zip] <=> b[:zip]}

如果要在数组中对数据进行分页,则应在控制器中使用 要求‘ will _ pagate/array’

使用 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

如果您将 嵌套哈希(散列格式中的散列)作为 Array 元素(如下所示的结构) ,并希望按键(这里的日期)对其进行排序

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
}
}
]

使用 Array‘ sort _ by’方法作为

data.sort_by { |element| element.keys.first }