如何在ruby中对散列数组进行sorting
我有一个数组,其每个元素是一个三个键/值对的散列:
:phone => "2130001111", :zip => "12345", :city => "sometown"
我想通过zip
对数据进行sorting,以便同一区域内的所有phone
都在一起。 Ruby有一个简单的方法来做到这一点? 可以will_paginate
数组中的分页数据?
Simples:
array_of_hashes.sort_by { |hsh| hsh[:zip] }
注意:
当使用sort_by
,需要将结果赋给一个新的variables: array_of_hashes = array_of_hashes.sort_by{}
否则你可以使用“bang”方法来修改: array_of_hashes.sort_by!{}
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_by方法将按升序sorting。
如果你需要按降序sorting,你可以这样做:
array_of_hashes.sort_by!(&:zip).reverse!
要么
array_of_hashes = array_of_hashes.sort_by(&:zip).reverse
无可比性,以避免遇到它
sorted = dataarray.sort do |a,b| if a[:zip] == nil -1 # nil gets to the start, swap if you need otherwise elsif b[:zip] == nil 1 else a[:zip] <=> b[:zip] end end