2016-07-16 10 views
-1

Ich versuche, alle Schlüssel mit dem gleichen Wert aus einem Hash zu bekommen und sie in ein Array als separate Einträge zu setzen. Ich habe diese Zeile Code, aber es sendet alles als ein einziger Eintrag:Ruby - alle Schlüssel in Hash mit dem gleichen Wert erhalten

@highest_wf_words << h.select {|k, v| v == val}.keys 

kann jemand raten, wie die Schlüssel zu trennen, so habe ich am Ende mit [[ „a“], [ „b“], [ "c"]] anstelle von [["a", "b", "c"]],

+2

Können Sie Beispieldaten für 'h' angeben? – oreoluwa

+0

Ihre Frage ist (sic) "wie kann man alle Schlüssel mit dem gleichen Wert bekommen?", Aber Ihr Code schlägt vor, dass es sein sollte, "wie kann man alle Schlüssel mit einem bestimmten Wert bekommen?" Das sind andere Fragen. –

+0

Sorry Cary du hast Recht. Die Art der Dateneingabe ist ein bisschen rückwärts. Ich bin sehr neu bei Ruby (das ist meine erste Woche, in der ich mit der Sprache arbeite, also ertrage mich einfach nur) :) Danke für deine Antwort und deinen Rat! – cbutler

Antwort

1

Vielleicht das?

h.select {|k, v| v == val}.keys.each {|k| @highest_wf_words << [k]} 

Oder diese:

@highest_wf_words.concat(h.select {|k, v| v == val}.keys.map {|k| [k]}) 
+0

Hey danke, das funktioniert. sehr cool :) – cbutler

1

Ich schlage vor, Sie einen Hash zu konstruieren, anstatt ein Array.

h = { a: 1, b: 2, c: 1, d: 3, e: 2 } 

h.each_with_object({}) { |(k,v),g| (g[v] ||= []) << k } 
    #=> {1=>[:a, :c], 2=>[:b, :e], 3=>[:d]} 

Dies beantwortet die Frage, die durch den Titel der Frage gestellt wird.

Verwandte Themen