2017-01-11 6 views
1
x = "one two" 
y = x.split 

hash = {} 

y.each do |key, value| 
    hash[key] = value 
end 
print hash 

Das Ergebnis dieser ist Zeichenfolge in Hash hinzuzufügen: ein => nil, zwei => nilWie bei jedem

Ich mag machen „Eins“ - Taste und „zwei“ - Wert, aber wie geht das?

Es könnte wie folgt aussehen: „ein“ => „zwei“

Antwort

0

Ein bisschen schneller Weg, es zu tun:

x="one two" 
Hash[[x.split]] 

Wenn Sie sich für eine allgemeine Lösung, wo x könnte mehr Elemente haben, in etwa so aussehen:

hash = {} 
x="one two three four" 
x.split.each_slice(2) do |key, value| # each_slice(n) pulls the next n elements from an array 
    hash[key] = value 
end 

hash 

Oder sind, wenn Sie wirklich Lust fühlen, versuchen Sie spritzen mit:

x="one two three four" 
x.split.each_slice(2).inject({}) do |memo, (key, value)| 
    memo[key] = value 
    memo 
end 
+0

Eigentlich ist @Zhong Zheng Antwort eleganter. Meine Lösung ist gut, wenn Sie aus irgendeinem Grund jede Methode (oder jede Methode) verwenden möchten und vielleicht für Bildungszwecke nützlich sind, aber in der realen Welt ist Hash [* y] 'sauberer. – Glyoko

3

y ein Array ist, also in dem Block key ist das Element selbst (‚eins‘, ‚zwei‘), und der Wert ist immer Null.

können Sie ein Array konvertieren Hash Splat-Operator mit *

Hash[*y]