it-swarm.com.de

So sortieren Sie ein Array von Hashes in Ruby

Ich habe ein Array, dessen Elemente jeweils ein Hash mit drei Schlüssel/Wert-Paaren sind:

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

Ich möchte die Daten nach Zip sortieren, damit alle phones im selben Bereich zusammen sind. Hat Ruby eine einfache Möglichkeit, dies zu tun? Können will_paginate Daten in einem Array paginieren?

129
jpwynn

Einfaches:

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

Hinweis:

Wenn Sie sort_by verwenden, müssen Sie das Ergebnis einer neuen Variablen zuweisen: array_of_hashes = array_of_hashes.sort_by{} Andernfalls können Sie die Methode "bang" verwenden, um Änderungen vorzunehmen: array_of_hashes.sort_by!{}

322
Gareth
sorted = dataarray.sort {|a,b| a[:Zip] <=> b[:Zip]}
17
Edu

Verwenden Sie den Knall, um das Array zu ändern:

array_of_hashes.sort_by!(&:Zip)

Oder es neu zuweisen:

array_of_hashes = array_of_hashes.sort_by(&:Zip)

Beachten Sie, dass die sort_by-Methode in aufsteigender Reihenfolge sortiert wird.

Wenn Sie nach absteigender Reihenfolge sortieren möchten, können Sie Folgendes tun:

array_of_hashes.sort_by!(&:Zip).reverse!

oder

array_of_hashes = array_of_hashes.sort_by(&:Zip).reverse
7
Diego D

Wenn Sie Daten in einem Array paginieren möchten, sollten Sie dies tun erfordern 'will_paginate/array' in Ihrem Controller

4
taivn07

Wenn Sie Nested Hash (Hash innerhalb eines Hash-Formats) als Array-Elemente (eine Struktur wie die folgende) haben und nach Schlüssel sortieren möchten (Datum hier)

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

Verwenden Sie die Array 'sort_by' -Methode als

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