Bagaimana cara mengubah array menjadi kunci Hash dan array lain menjadi nilai hash yang sama?

Saya memiliki 2 array:

array1 = ["H", "e", "l", "l", "o"]
array2 = ["o", "l", "l", "e", "H"]

Saya ingin elemen array1 menjadi kunci dalam Hash baru, dan elemen array2 menjadi nilai yang sesuai dalam Hash yang sama. Bisakah seseorang menyarankan cara melakukan ini?

Terima kasih


person kitch6041    schedule 30.05.2013    source sumber
comment
Perhatikan bahwa ada dua "l"s dalam array kunci, sedangkan Hash tidak boleh memiliki kunci duplikat. Solusi apa pun akan memiliki "l" => "e" atau "l" => "l", namun tidak keduanya. Sesuatu yang perlu diperhatikan jika Anda akan memiliki duplikat dalam array yang menjadi kuncinya.   -  person Darshan Rivka Whittle    schedule 30.05.2013
comment
Terima kasih, saya sangat baru dalam pemrograman dan saya menghargai umpan baliknya.   -  person kitch6041    schedule 30.05.2013


Jawaban (4)


Ada dua "l"s dalam array "kunci", sedangkan Hash tidak boleh memiliki kunci duplikat. Solusi apa pun akan memiliki "l" => "e" atau "l" => "l", namun tidak keduanya. Jika tidak apa-apa, maka solusi @RubyLovely bagus. Jika Anda ingin mempertahankan pemetaan untuk setiap pasangan, Array Hash mungkin sesuai:

array1 = ["H", "e", "l", "l", "o"]
array2 = ["o", "l", "l", "e", "H"]
array1.zip(array2).map{|pair| Hash[*pair]}
# => [{"H"=>"o"}, {"e"=>"l"}, {"l"=>"l"}, {"l"=>"e"}, {"o"=>"H"}]
person Darshan Rivka Whittle    schedule 30.05.2013

Solusi dari @RubyLovely adalah bagaimana saya melakukannya tetapi demi variasi, berikut adalah solusi lain:

array1.each_with_index.reduce({}) do |memo,(x,i)|
  memo[x] = array2[i]; memo
end
# => {"H"=>"o", "e"=>"l", "l"=>"e", "o"=>"H"} 
person maerics    schedule 30.05.2013

Dengan melakukan cara ini, Anda tidak perlu membuat array perantara, dan karenanya akan lebih efektif daripada melakukannya.

h = {}
array1.zip(array2){|k, v| h[k] = v}
h # => {"H"=>"o", "e"=>"l", "l"=>"e", "o"=>"H"}
person sawa    schedule 31.05.2013

person    schedule
comment
ini satu lagi- array1 = ["H", "e", "k", "l", "o"] array2 = ["o", "l", "l", "e", "H"] p Hash[array1.zip(array2)] # >> {"H"=>"o", "e"=>"l", "k"=>"l", "l"=>"e", "o"=>"H"} - person Arup Rakshit; 30.05.2013
comment
@ kitch6041 Apa yang @@darshan sebutkan adalah valid, jika Anda memiliki kunci duplikat, maka Anda perlu memikirkan struktur data bagaimana Anda merepresentasikannya. Jika tidak, jika Anda mau, bisa menggunakan solusi saya juga sementara ada beberapa jawaban yang benar. Mana yang sesuai dengan kebutuhan Anda, terimalah. :) - person Arup Rakshit; 30.05.2013