Hash tương tự như mảng và nó khác nhau bởi mảng được lập chỉ mục bằng số nguyên và hàm băm bạn có thể lập chỉ mục cho nó theo chuỗi, biểu thức. công thức, đối tượng ….. Khi bạn lưu trữ một giá trị trong hàm băm, bạn phải cung cấp 2 đối tượng là khóa (khóa) và giá trị (giá trị). Ví dụ:
1 2 | hash = {a: 1, b: 2, c: 3, d: 4} // => {a: 1, b: 2, c: 3, d: 4} |
Sức mạnh của hàm băm là: họ có thể sử dụng bất kỳ đối tượng nào làm chỉ mục. Nó có giá trị mặc định và sẽ trả về nil khi giá trị khóa không tồn tại trong hàm băm.
Tạo một Hash
Chúng tôi có một số cách khác nhau để tạo ra một hàm băm. Dưới đây bạn có thể thấy bạn có thể tạo một hàm băm trống bằng cách:
1 2 | months = Hash.new |
Và bạn cũng có thể tạo hàm băm mới với mặc định như dưới đây:
1 2 3 4 | hash = Hash.new( "default" ) hash[0] // default hash[1] // default |
Nếu khóa không tồn tại, hàm băm trả về giá trị mặc định
Một cách khác để tạo hàm băm trong Ruby:
1 2 3 4 5 6 7 | hash = {} hash[:a] = 1 hash[:b] = 2 // {a: 1, b: 2, c: 3} hash = {a: 1, b: 2, c: 3} |
Thêm dữ liệu vào hàm băm
1 2 3 | hash = {a: 1, b: 2} hash[:c] = 3 // => {:a=>1, :b=>2, :c=>3} |
Xóa dữ liệu trong hàm băm
1 2 3 | hash.delete(:a) // {:b=>2, :c=>3} h.clear // => hash = {} |
Các hoạt động khác
Sử dụng mỗi vòng lặp của mỗi thuộc tính trong hàm băm
1 2 3 4 5 | hash = {a: 1, b: 2, c: 3} hash.each do |key, val| puts "#{key}" # => a b c end |
Sử dụng each_key
nếu chỉ cần key
bằng hàm băm
1 2 3 4 | hash.each_key do |key| puts "#{key}" # => a b c end |
Sử dụng each_value
nếu chỉ cần value
bằng hàm băm
1 2 3 4 | hash.each_value do |val| puts "#{val}" # 1 2 3 end |
Kiểm tra key
tồn tại trong hàm băm
1 2 3 4 5 6 | hash = {a: 1, b: 2, c: 3} hash.has_key?(:a) # => true hash.include?(:b) # => true hash.key?(:c) # => true hash.member?(:d) # => false |
Kiểm tra băm empty?
1 2 3 | hash = {a: 1, b: 2, c: 3} hash.empty? // true |
Độ dài băm
1 2 3 | hash = {a: 1, b: 2, c: 3} hash.length // => 3 |
Hợp nhất 2 băm
1 2 3 4 5 | hash1 = {a: 1, b: 2, c: 3} hash2 = {a: 5, d: 4} hash1.update(hash2) // {:a=>5, :b=>2, :c=>3, :d=>4} hash1.merge(hash2) // {:a=>5, :b=>2, :c=>3, :d=>4} |
has_key? (khóa)
Kết quả sẽ trả về true nếu hàm băm có giá trị bằng khóa
1 2 3 4 | hash = { a: 100, b:> 200 } hash.has_value?(100) #=> true hash.has_value?(999) #=> false |
bao gồm? (chính)
Kết quả sẽ trả về true nếu khóa tồn tại trong hàm băm
1 2 3 4 | hash = { a: 100, b:> 200 } hash.has_key?("a") #=> true hash.has_key?("z") #=> false |
giá trị cốt lõi)
Lấy chìa khóa thông qua giá trị
1 2 3 4 5 | hash = { a: 100, b: 200, c: 300, d: 300 } hash.key(200) #=> "b" hash.key(300) #=> "c" hash.key(999) #=> nil |
chìa khóa
Trả về một mảng chứa các khóa băm:
1 2 3 | hash = { a: 100, b: 200, c: 300, d: 400 } hash.keys #=> ["a", "b", "c", "d"] |
giá trị
Trả về một mảng chứa các giá trị băm
1 2 3 | hash = { a: 100, b: 200, c: 300, d: 400 } hash.values #=> [100, 200, 300, 400] |
** hợp nhất (other_hash) **
Trả về một hàm băm mới bao gồm other_hash. Nếu khóa được nhân đôi thì giá trị sẽ được chỉ định trong other_hash
1 2 3 4 | hash1 = { a: 100, b: 200 } hash2 = { b: 254, c: 300 } hash1.merge(hash2) #=> {"a"=>100, "b"=>254, "c"=>300} |
chọn {| khóa, giá trị | khối}
Trả về một hàm băm mới chứa các cặp khớp (khối trả về đúng)
1 2 3 4 | hash = { a: 100, b: 200, c: 300 } hash.select {|k,v| k > "a"} #=> {"b" => 200, "c" => 300} hash.select {|k,v| v < 200} #=> {"a" => 100} |