如何在ruby中对哈希数组进行排序

时间:2011-03-30 08:32:29

标签: arrays ruby sorting

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

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

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

5 个答案:

答案 0 :(得分:328)

Simples:

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

注意:

使用sort_by时,您需要将结果分配给新变量:array_of_hashes = array_of_hashes.sort_by{}否则您可以使用“bang”方法进行适当修改:array_of_hashes.sort_by!{}

答案 1 :(得分:17)

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

答案 2 :(得分:8)

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

答案 3 :(得分:4)

如果你想为数组中的数据分页,你应该在控制器中要求'will_paginate / array'

答案 4 :(得分:1)

如果您将嵌套哈希(散列格式内的哈希)作为数组元素(如下所示的结构)并希望按键排序(此处为日期)

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

使用数组'sort_by'方法

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