2016-03-29 7 views
0

Ich versuche Hash-Schlüssel zu sortieren, (Schlüssel können doppelt sein), aber Ruby ignoriert den doppelten Schlüssel und dann sortieren verbleibenden Schlüssel mit Warnung wie folgt.RUBY WATIR - Sortieren doppelte Schlüssel in Hash gespeichert

Code:

gridColumn1= Hash.new{|hsh,key| hsh[key] = [] } 

gridColumn1 = { "z"=>["AAPL"], "A"=>["B"], "A"=>["AAPL", "FB", "GE"], "GOOG"=>["HD", "QQQ", "SCHW"], "V"=>[]} 

gridColumn1.sort.to_h 

tatsächliche Ausgang:

{"A"=>["AAPL", "FB", "GE"], "GOOG"=>["HD", "QQQ", "SCHW"], "V"=>[], "z"=>["AAPL"]} 

mit warning: duplicated key at line 14 ignored: "A"

Ich erwarte:

{"A"=>["B"], "A"=>["AAPL", "FB", "GE"], "GOOG"=>["HD", "QQQ", "SCHW"], "V"=>[], "z"=>["AAPL"]} 
+0

Bitte lesen Sie [die Hash-Dokumentation] (http://ruby-doc.org/core-2.3.0/Hash.html): "' Ein Hash ist eine wörterbuchartige Sammlung eindeutiger Schlüssel und ihrer Werte. "" Sie können nicht das tun, was Sie versuchen zu tun. –

Antwort

0

Ruby-Hash kann nicht doppelte Schlüssel haben, ist es Der ganze Zweck ist, Schlüssel -> Wert zuzuordnen.

Um doppelte Schlüssel zu haben - Sie ein Array von Arrays verwenden können:

gridColumn1 = [ 
    ["z", ["AAPL"]], 
    ["A",["B"]], 
    ["A",["AAPL", "FB", "GE"]], 
    ["GOOG", ["HD", "QQQ", "SCHW"]], 
    ["V", []] 
] 

gridColumn1.sort_by &:first 
# => [["A", ["B"]], ["A", ["AAPL", "FB", "GE"]], ["GOOG", ["HD", "QQQ", "SCHW"]], ["V", []], ["z", ["AAPL"]]] 
+0

Dank Vasfed, ich kann mit diesem Ansatz gehen, aber immer noch werde ich als [["A", ["AAPL", "FB", "GE"]], ["A", ["B"]] , ["GOOG", ["HD", "QQQ", "SCHW"]], ["V", []], ["z", ["AAPL"]]] aber ich erwarte [["A ", [" B "]], [" A ", [" AAPL "," FB "," GE "]], [" GOOG ", [" HD "," QQQ "," SCHW "]], [ "V", []], ["z", ["AAPL"]]]. – Dave

+0

@Dave das bedeutet, dass Sie nicht nur Schlüssel, sondern auch den Wert sortieren möchten, können Sie '.sort_by &: to_s' – Vasfed

+0

Nr. gridColumn1 = [[" Z "], [" A "," K "," N "], [" A "," C "], [" A "," B "]] Sagen wir, ich möchte dieses zweidimensionale Array auf dem ersten Element jedes Unterarrays sortieren und den Ausgang, nach dem ich suche, ist gridColumn1 = [[A, K, N], [A, C], [A, B], ["Z"]]. Früher wechselte ich zu Hashes, da ich nicht über die Ausgabe mit dem Array kam, aber Hashes kann keine doppelten Schlüssel haben, jetzt bin ich wieder bei demselben Problem. Vielen Dank für Ihre Zeit. – Dave

Verwandte Themen