Cách thêm mục mới vào hàm băm


177

Tôi mới sử dụng Ruby và không biết cách thêm mục mới vào hàm băm hiện có. Ví dụ: đầu tiên tôi xây dựng hàm băm:

hash = {item1: 1}

sau đó tôi muốn thêm item2 vì vậy sau này tôi có hàm băm như thế này:

{item1: 1, item2: 2}

Tôi không biết phương pháp nào để làm băm, ai đó có thể giúp tôi không?

Câu trả lời:


305

Tạo hàm băm:

hash = {:item1 => 1}

Thêm một mục mới vào nó:

hash[:item2] = 2

7
Sử dụng hợp nhất! phương pháp hash.merge!(item2: 2)để hợp nhất và lưu giá trị !
maguri

3
@maguri hoạt động hash.merge!(item2: 2)chậm hơn so với hash[:item2] = 2khi chỉ có một đối số
Rahul Dess

72

Nếu bạn muốn thêm các mục mới từ hàm băm khác - sử dụng mergephương thức:

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

Trong trường hợp cụ thể của bạn, nó có thể là:

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

nhưng sẽ không khôn ngoan khi sử dụng nó khi bạn chỉ nên thêm một yếu tố nữa.

Hãy chú ý rằng mergesẽ thay thế các giá trị bằng các khóa hiện có:

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

chính xác như hash[:item1] = 2

Ngoài ra, bạn nên chú ý rằng mergephương thức (tất nhiên) không ảnh hưởng đến giá trị ban đầu của biến băm - nó trả về một hàm băm mới được hợp nhất. Nếu bạn muốn thay thế giá trị của biến băm thì hãy sử dụng merge!thay thế:

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

35

hash.store (key, value) - Lưu trữ một cặp key-value trong hàm băm.

Thí dụ:

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

Documentation


27

Nó đơn giản như:

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

Tạo hàm băm như:

h = Hash.new
=> {}

Bây giờ chèn vào hàm băm như:

h = Hash["one" => 1]

2
Nếu bạn thử chèn nhiều khóa theo cách này, bạn sẽ thấy rằng bạn thực sự đang tạo một hàm băm mới mỗi lần. Có lẽ không phải là những gì bạn muốn. Và nếu đó những gì bạn muốn, bạn không cần Hash.newbất kể phần nào, bởi vì Hash[]đã tạo ra một hàm băm mới.
triết học
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.