web-dev-qa-db-ja.com

rubyのハッシュの配列をソートする方法

配列があり、各要素は3つのキー/値ペアを持つハッシュです:

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

同じエリア内のすべてのZipが一緒になるように、phoneでデータを並べ替えたいと思います。 Rubyには簡単な方法がありますか? will_paginateは配列内のデータをページ分割できますか?

134
jpwynn
sorted = dataarray.sort {|a,b| a[:Zip] <=> b[:Zip]}
16
Edu

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
8
Diego D

配列内のデータをページ分割したい場合は、 'will_paginate/array'が必要です あなたのコントローラーで

4
taivn07

ネストされたハッシュ(ハッシュ形式内のハッシュ)が配列要素(次のような構造)としてあり、キー(ここの日付)でソートする場合

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 }
2
Abhi