Nếu bạn có một hàm băm, bạn có thể thêm các mục vào nó bằng cách tham chiếu chúng bằng khóa:
hash = { }
hash[:a] = 'a'
hash[:a]
# => 'a'
Ở đây, giống như [ ]
tạo một mảng trống, { }
sẽ tạo một băm trống.
Mảng có không hoặc nhiều phần tử theo một thứ tự cụ thể, trong đó các phần tử có thể bị trùng lặp. Hàm băm không có hoặc nhiều phần tử được tổ chức theo khóa , trong đó các khóa có thể không bị trùng lặp nhưng các giá trị được lưu trữ ở các vị trí đó có thể được.
Hàm băm trong Ruby rất linh hoạt và có thể có các khóa gần như bất kỳ loại nào mà bạn có thể ném vào nó. Điều này làm cho nó khác với các cấu trúc từ điển bạn tìm thấy trong các ngôn ngữ khác.
Điều quan trọng cần lưu ý là bản chất cụ thể của khóa của hàm băm thường quan trọng:
hash = { :a => 'a' }
# Fetch with Symbol :a finds the right value
hash[:a]
# => 'a'
# Fetch with the String 'a' finds nothing
hash['a']
# => nil
# Assignment with the key :b adds a new entry
hash[:b] = 'Bee'
# This is then available immediately
hash[:b]
# => "Bee"
# The hash now contains both keys
hash
# => { :a => 'a', :b => 'Bee' }
Ruby on Rails hơi nhầm lẫn điều này bằng cách cung cấp HashWithIndierenceAccess nơi nó sẽ chuyển đổi tự do giữa các phương thức định địa chỉ Symbol và String.
Bạn cũng có thể lập chỉ mục trên hầu hết mọi thứ, bao gồm các lớp, số hoặc các hàm băm khác.
hash = { Object => true, Hash => false }
hash[Object]
# => true
hash[Hash]
# => false
hash[Array]
# => nil
Hàm băm có thể được chuyển đổi thành Mảng và ngược lại:
# Like many things, Hash supports .to_a
{ :a => 'a' }.to_a
# => [[:a, "a"]]
# Hash also has a handy Hash[] method to create new hashes from arrays
Hash[[[:a, "a"]]]
# => {:a=>"a"}
Khi nói đến việc "chèn" mọi thứ vào một Hash, bạn có thể thực hiện từng thứ một hoặc sử dụng merge
phương pháp để kết hợp các hàm băm:
{ :a => 'a' }.merge(:b => 'b')
# {:a=>'a',:b=>'b'}
Lưu ý rằng điều này không làm thay đổi hàm băm ban đầu mà thay vào đó trả về một hàm băm mới. Nếu bạn muốn kết hợp một hàm băm này vào một hàm băm khác, bạn có thể sử dụng merge!
phương pháp:
hash = { :a => 'a' }
# Returns the result of hash combined with a new hash, but does not alter
# the original hash.
hash.merge(:b => 'b')
# => {:a=>'a',:b=>'b'}
# Nothing has been altered in the original
hash
# => {:a=>'a'}
# Combine the two hashes and store the result in the original
hash.merge!(:b => 'b')
# => {:a=>'a',:b=>'b'}
# Hash has now been altered
hash
# => {:a=>'a',:b=>'b'}
Giống như nhiều phương thức trên Chuỗi và Mảng, hàm !
chỉ ra rằng nó là một hoạt động tại chỗ .