সমান আকারের দুটি অ্যারে থেকে একটি রুবি হ্যাশ কীভাবে তৈরি করবেন?


92

আমার দুটি অ্যারে আছে

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

এবং

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

আমি চাই

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

কোন উপায় এই কাজ করতে?

উত্তর:


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

... জঘন্য, আমি রুবিকে ভালবাসি।


4
এটি বেশ সুস্পষ্ট তবে কেউ যদি ভাবছেন, আপনি যদি নতুন হ্যাশ থেকে মূল অ্যারেগুলি পেতে চান তবে আপনি কেবল কল করতে পারেন 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গোলাম, তবে এই স্টাইলে এগুলি সমতল।


1

শুধু কৌতূহলের স্বার্থে:

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%
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.