วิธีเพิ่มรายการใหม่เพื่อแฮช


177

ฉันยังใหม่กับ Ruby และไม่ทราบวิธีเพิ่มรายการใหม่ลงในแฮชที่มีอยู่แล้ว ตัวอย่างเช่นตอนแรกฉันสร้างแฮ:

hash = {item1: 1}

หลังจากนั้นต้องการเพิ่ม item2 ดังนั้นหลังจากนี้ฉันมีแฮชเช่นนี้:

{item1: 1, item2: 2}

ฉันไม่รู้ว่าจะทำอย่างไรกับแฮชมีใครช่วยฉันบ้าง

คำตอบ:


305

สร้างแฮช:

hash = {:item1 => 1}

เพิ่มรายการใหม่เข้าไป:

hash[:item2] = 2

7
ใช้การผสาน! วิธีhash.merge!(item2: 2)การผสานและบันทึกค่า!
maguri

3
@maguri hash.merge!(item2: 2)ทำงานช้าลงเมื่อเทียบกับhash[:item2] = 2เมื่อมีข้อโต้แย้งเดียว
Rahul Dess

72

หากคุณต้องการเพิ่มรายการใหม่จากmergeวิธีแฮชอื่น:

hash = {:item1 => 1}
another_hash = {:item2 => 2, :item3 => 3}
hash.merge(another_hash) # {:item1=>1, :item2=>2, :item3=>3}

ในกรณีเฉพาะของคุณอาจเป็น:

hash = {:item1 => 1}
hash.merge({:item2 => 2}) # {:item1=>1, :item2=>2}

แต่ไม่ควรใช้เมื่อคุณควรเพิ่มองค์ประกอบอีกหนึ่งองค์ประกอบ

ให้ความสนใจที่mergeจะแทนที่ค่าด้วยคีย์ที่มีอยู่:

hash = {:item1 => 1}
hash.merge({:item1 => 2}) # {:item1=>2}

เหมือนกันหมด hash[:item1] = 2

นอกจากนี้คุณควรทราบว่าmergeวิธีการ (แน่นอน) ไม่มีผลต่อค่าดั้งเดิมของตัวแปรแฮช - มันจะส่งคืนแฮชที่ผสานใหม่ หากคุณต้องการแทนที่ค่าของตัวแปรแฮชให้ใช้merge!แทน:

hash = {:item1 => 1}
hash.merge!({:item2 => 2})
# now hash == {:item1=>1, :item2=>2}

35

hash.store (คีย์, ค่า) - เก็บคู่ของคีย์ - ค่าในแฮช

ตัวอย่าง:

hash   #=> {"a"=>9, "b"=>200, "c"=>4}
hash.store("d", 42) #=> 42
hash   #=> {"a"=>9, "b"=>200, "c"=>4, "d"=>42}

Documentation


27

มันง่ายเหมือน:

irb(main):001:0> hash = {:item1 => 1}
=> {:item1=>1}
irb(main):002:0> hash[:item2] = 2
=> 2
irb(main):003:0> hash
=> {:item1=>1, :item2=>2}


4
hash_items = {:item => 1}
puts hash_items 
#hash_items will give you {:item => 1}

hash_items.merge!({:item => 2})
puts hash_items 
#hash_items will give you {:item => 1, :item => 2}

hash_items.merge({:item => 2})
puts hash_items 
#hash_items will give you {:item => 1, :item => 2}, but the original variable will be the same old one. 

0

สร้างแฮชเป็น:

h = Hash.new
=> {}

ตอนนี้แทรกลงในแฮชเป็น:

h = Hash["one" => 1]

2
หากคุณลองแทรกหลายคีย์ด้วยวิธีนี้คุณจะเห็นว่าคุณกำลังสร้างแฮชใหม่ทุกครั้ง อาจไม่ใช่สิ่งที่คุณต้องการ และถ้านั่นคือสิ่งที่คุณต้องการคุณไม่จำเป็นต้องมีHash.newส่วนร่วมเพราะHash[]ไม่ได้สร้างแฮชใหม่แล้ว
philomory
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.