Arrays 如何在ruby中对哈希数组进行排序
我有一个数组,每个数组元素都是一个包含三个键/值对的散列:Arrays 如何在ruby中对哈希数组进行排序,arrays,ruby,sorting,Arrays,Ruby,Sorting,我有一个数组,每个数组元素都是一个包含三个键/值对的散列: :phone => "2130001111", :zip => "12345", :city => "sometown" 我想按zip对数据进行排序,以便将同一区域中的所有手机放在一起。Ruby有没有一个简单的方法?是否可以对数组中的数据进行分页?简单: array_of_hashes.sort_by { |hsh| hsh[:zip] } 注意: 使用sort\u by时,需要将结果赋给一个新变量:array\u
:phone => "2130001111", :zip => "12345", :city => "sometown"
我想按zip
对数据进行排序,以便将同一区域中的所有手机
放在一起。Ruby有没有一个简单的方法?是否可以对数组中的数据进行分页?简单:
array_of_hashes.sort_by { |hsh| hsh[:zip] }
注意:
使用
sort\u by
时,需要将结果赋给一个新变量:array\u of_hashes=array\u of_hashes.sort\u by{}
否则可以使用“bang”方法就地修改:array\u of_hashes.sort\u by!{}
sorted=dataarray.sort{a,b | a[:zip]b[:zip]}
sorted = dataarray.sort {|a,b| a[:zip] <=> b[:zip]}
如果要为数组中的数据分页,则应在控制器中要求“will_paginate/array”使用bang就地修改数组:
array_of_hashes.sort_by!(&:zip)
或重新分配:
array_of_hashes = array_of_hashes.sort_by(&:zip)
请注意,sort\u by方法将按升序排序。
如果需要按降序排序,可以执行以下操作:
array_of_hashes.sort_by!(&:zip).reverse!
或
如果将嵌套哈希(哈希格式中的哈希)作为数组元素(如下所示的结构),并希望按键(此处的日期)对其排序
将数组“sort_by”方法用作
data.sort_by { |element| element.keys.first }
使用
sort\u by
时,需要将结果赋给一个新变量:array\u of_hashes=array\u of_hashes.sort\u by{}
否则可以使用“bang”方法就地修改:array\u of_hashes.sort\u by!{}
甚至更短:散列数组。sort_by(&:zip)
@Etienne:这是的快捷方式。sort_by{hsh | hsh.zip}
因此,只有将.zip
定义为每个散列的方法时,它才会起作用。默认情况下,散列不会将它们的键公开为方法,因此我猜您可能还有其他原因。请注意:砰的一声:array\u of\u hashes.sort\u By!(&:zip)
@Gareth:对于ActiveRecords,.zip
和[:zip]
都可以工作。ActudieCords具有两种风格定义。如果生成数组而不是给定的数组,则考虑将其设为哈希,使用元素(例如)<代码> [城市,zip ]= >电话< /代码>或<代码>城市> > {zIP1= > [],zIP2= >…} /代码>。符号<代码> &:是反向方法:p这仅在“父”散列只有一个键(本例中为日期)时有效,因为在某些ruby版本中,.keys
的顺序是不确定的。
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
}
}
]
data.sort_by { |element| element.keys.first }