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 zip
so sortieren, dass alle phone
s im selben Bereich zusammen sind. Hat Ruby eine einfache Möglichkeit, das zu tun? Kann will_paginate
Daten in einem Array paginieren?
[city,zip]=>phone
oder festlegencity=>{zip1=>[<phones>], zip2=>...}
.Antworten:
Beispiele:
Hinweis:
Bei der Verwendung müssen
sort_by
Sie das Ergebnis einer neuen Variablen zuweisen.array_of_hashes = array_of_hashes.sort_by{}
Andernfalls können Sie die "Bang" -Methode verwenden, um Änderungen an Ort und Stelle vorzunehmen:array_of_hashes.sort_by!{}
quelle
sort_by
Sie verwenden, müssen Sie das Ergebnis einer neuen Variablen zuweisen.array_of_hashes = array_of_hashes.sort_by{}
Andernfalls können Sie die "Bang" -Methode verwenden, um Folgendes zu ändern:array_of_hashes.sort_by!{}
array_of_hashes.sort_by(&:zip)
.sort_by { |hsh| hsh.zip }
und funktioniert daher nur, wenn.zip
sie für jeden Hash als Methode definiert ist. Standardmäßig machen Hashes ihre Schlüssel nicht als Methoden verfügbar, also haben Sie wahrscheinlich noch etwas anderes vor.array_of_hashes.sort_by!(&:zip)
.zip
und[:zip]
beide arbeiten. Bei ActiveRecords sind beide Stile definiert.quelle
Verwenden Sie den Knall, um das Array an Ort und Stelle zu ändern:
Oder ordnen Sie es neu zu:
Beachten Sie, dass die Methode sort_by nach aufsteigender Reihenfolge sortiert wird.
Wenn Sie in absteigender Reihenfolge sortieren müssen, können Sie Folgendes tun:
oder
quelle
&:
ist eine Abkürzung fürmethod
, nichtattribute
! Sie nehmen an, dass der Hash Methoden hat, die Attribute widerspiegeln.reverse
Methode: pWenn Sie nach Daten im Array paginieren möchten, sollten Sie in Ihrem Controller 'will_paginate / array' benötigen
quelle
Wenn Sie Nested Hash (Hash in einem Hash-Format) als Array-Elemente (eine Struktur wie die folgende) haben und diese nach Schlüssel sortieren möchten (Datum hier)
Verwenden Sie die Array-Methode 'sort_by' als
quelle