रूबी हैश को दो समान आकार के सरणियों से कैसे बनाएं?


92

मेरे पास दो ऐरे हैं

a = [:foo, :bar, :baz, :bof]

तथा

b = ["hello", "world", 1, 2]

मुझे चाहिए

{:foo => "hello", :bar => "world", :baz => 1, :bof => 2}

इसे करने का कोई तरीका?

जवाबों:


203
h = Hash[a.zip b] # => {:baz=>1, :bof=>2, :bar=>"world", :foo=>"hello"}

... धिक्कार है, मुझे रूबी से प्यार है।


3
यह बहुत स्पष्ट है, लेकिन अगर कोई सोच रहा है, अगर आप नए हैश से मूल सरणियाँ प्राप्त करना चाहते हैं तो आप कॉल कर सकते हैं h.keysऔर h.values
भतीजी

38

बस यह इंगित करना चाहता था कि ऐसा करने का थोड़ा साफ तरीका है:

h = a.zip(b).to_h # => {:foo=>"hello", :bar=>"world", :baz=>1, :bof=>2}

हालांकि "मैं रूबी प्यार करता हूँ" भाग पर सहमत होना है!


16

इसके बारे में क्या खयाल है?

[a, b].transpose.to_h

यदि आप रूबी 1.9 का उपयोग करते हैं:

Hash[ [a, b].transpose ]

मुझे लगता a.zip(b)है कि aयह मास्टर है और bगुलाम है, लेकिन इस शैली में वे सपाट हैं।


0

बस जिज्ञासा के लिए:

require 'fruity'

a = [:foo, :bar, :baz, :bof]
b = ["hello", "world", 1, 2]

compare do
  jtbandes { h = Hash[a.zip b] }
  lethjakman { h = a.zip(b).to_h }
  junichi_ito1 { [a, b].transpose.to_h }
  junichi_ito2 { Hash[ [a, b].transpose ] } 
end

# >> Running each test 8192 times. Test will take about 1 second.
# >> lethjakman is similar to junichi_ito1
# >> junichi_ito1 is similar to jtbandes
# >> jtbandes is similar to junichi_ito2

compare do 
  junichi_ito1 { [a, b].transpose.to_h }
  junichi_ito2 { Hash[ [a, b].transpose ] } 
end

# >> Running each test 8192 times. Test will take about 1 second.
# >> junichi_ito1 is faster than junichi_ito2 by 19.999999999999996% ± 10.0%
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.