2010-07-29 7 views
77

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

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

और

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

मैं चाहता हूँ

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

यह करने के लिए किसी भी तरह से?

+0

कृपया मेरे उत्तर को स्वीकार करें यदि यह आपके लिए काम करता है :) – jtbandes

उत्तर

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

... अरे, मुझे रुबी पसंद है।

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

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

+2

यह बहुत स्पष्ट है लेकिन यदि कोई सोच रहा है, तो यदि आप नए हैश से मूल सरणी प्राप्त करना चाहते हैं तो आप केवल 'h.keys' और' h .values'। – bhaity

27

बस वहाँ ऐसा करने का एक थोड़ा क्लीनर तरीका है का कहना है कि चाहते थे!

+1

यह रूबी 2.0 और उच्च – Matilda

13

इस बारे में कैसे?

[a, b].transpose.to_h 

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

Hash[ [a, b].transpose ] 

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

+0

पर काम करता है मुझे यह पसंद है। –

+0

यह समझना आसान है – bhaity

संबंधित मुद्दे