จะเปลี่ยนอาร์เรย์ให้เป็นคีย์ของแฮชและอาร์เรย์อื่นให้เป็นค่าของแฮชเดียวกันได้อย่างไร

ฉันมี 2 อาร์เรย์:

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

ฉันต้องการให้องค์ประกอบ array1 กลายเป็นคีย์ในแฮชใหม่และองค์ประกอบ array2 กลายเป็นค่าที่สอดคล้องกันในแฮชเดียวกัน ใครช่วยกรุณาแนะนำวิธีการทำเช่นนี้?

ขอบคุณ


person kitch6041    schedule 30.05.2013    source แหล่งที่มา
comment
โปรดทราบว่ามี "l" สองตัวในอาร์เรย์คีย์ ในขณะที่แฮชไม่สามารถมีคีย์ที่ซ้ำกัน โซลูชันใดๆ จะมี "l" => "e" หรือ "l" => "l" แต่ไม่ใช่ทั้งสองอย่าง สิ่งที่ต้องระวังหากคุณจะมีรายการซ้ำในอาร์เรย์ที่กลายเป็นคีย์   -  person Darshan Rivka Whittle    schedule 30.05.2013
comment
ขอบคุณ ฉันยังใหม่กับการเขียนโปรแกรมและขอขอบคุณข้อเสนอแนะ   -  person kitch6041    schedule 30.05.2013


คำตอบ (4)


มี "l" สองตัวในอาร์เรย์ "key" ในขณะที่แฮชไม่สามารถมีคีย์ที่ซ้ำกันได้ โซลูชันใดๆ จะมี "l" => "e" หรือ "l" => "l" แต่ไม่ใช่ทั้งสองอย่าง หากไม่เป็นไร วิธีแก้ปัญหาของ @RubyLovely ก็เยี่ยมมาก หากคุณต้องการเก็บการแมปไว้สำหรับแต่ละคู่ อาร์เรย์ของแฮชอาจเหมาะสม:

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

วิธีแก้ปัญหาโดย @RubyLovely คือสิ่งที่ฉันจะทำ แต่เพื่อความหลากหลายนี่เป็นอีกวิธีหนึ่ง:

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

เมื่อทำเช่นนี้ คุณไม่จำเป็นต้องสร้างอาร์เรย์ระดับกลาง และด้วยเหตุนี้จึงมีประสิทธิภาพมากกว่าการทำเช่นนี้

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
นี่อีกอันหนึ่ง- 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 สิ่งที่ @@darshan กล่าวถึงนั้นถูกต้อง หากคุณมีคีย์ซ้ำกัน คุณต้องคิดถึงโครงสร้างข้อมูลว่าคุณจะนำเสนอมันอย่างไร ถ้าไม่เช่นนั้น หากคุณต้องการก็สามารถใช้วิธีการแก้ปัญหาของฉันได้เช่นกันในขณะที่มีคำตอบที่ถูกต้องหลายข้อ อันไหนที่เหมาะกับความต้องการของคุณยอมรับมัน :) - person Arup Rakshit; 30.05.2013