如何在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