12/08/2018, 15:31

Các thao tác với hash trong ruby

Bài viết này sẽ giới thiệu các kiến thức về các thao tác khi làm việc với hash trong Ruby. Tạo một hash mới hash = {} // tạo hash có giá trị rỗng hash = {a: 1, b: 2} // => {a: 1, b: 2} , tạo hash có key là a với giá trị 1 và key b với giá trị 2 Lấy giá trị từ hash hash = {a: 1, b: 2} ...

Bài viết này sẽ giới thiệu các kiến thức về các thao tác khi làm việc với hash trong Ruby.

Tạo một hash mới

hash = {} // tạo hash có giá trị rỗng
hash = {a: 1, b: 2}   // => {a: 1, b: 2} , tạo hash có key là a với giá trị 1 và key b với giá trị 2

Lấy giá trị từ hash

hash = {a: 1, b: 2} 
hash[:a] // => 1
hash[:b] // => 2

Có thể dùng fetch

hash.fetch(:a) // => 1
hash.fetch(:b) // => 2

Thêm data vào trong hash

hash = {a: 1, b: 2}
hash[:c] = 3 // => hash = {:a=>1, :b=>2, :c=>3}

Xóa data trong hash

hash.delete(:a) // hash = {:b=>2, :c=>3}
h.clear // => hash = {}

Dùng reject để loại bỏ một số data trong hash theo điều kiện

hash = {a: 1, b: 2, c: 3}
hash.reject {|key, value| key == :b} 
// =>  trả về {a: 1, c: 3}, 
// => giá trị hash vẫn giữ nguyên hash = {a: 1, b: 2, c: 3}
hash.reject! {|key, value| key == :b} 
// =>  trả về {a: 1, c: 3}, 
// => giá trị hash = {a: 1, c: 3}

Các thao tác khác

Dùng each vòng lặp mỗi thuộc tình trong hash

hash = {a: 1, b: 2, c: 3}
hash.each do |key, val|
  puts "#{key}"  # => a b c
end

Dùng each_key nếu chỉ cần key của hash

hash.each_key do |key|
  puts "#{key}"  # => a b c
end

Dùng each_value nếu chỉ cần value của hash

hash.each_value do |val|
  puts "#{val}" # 1 2 3
end

Kiểm tra key tồn tại trong hash

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 hash rỗng empty?

hash = {a: 1, b: 2, c: 3}
hash.empty? // true

Độ dài hash

hash = {a: 1, b: 2, c: 3}
hash.length  // => 3

Sắp xếp hash (sắp xếp theo key)

hash = {b: 1, c: 2, a: 3, d: 4}
hash.sort // => [[:a, 3], [:b, 1], [:c, 2], [:d, 4]]

Merge 2 hash

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}
0