BẮT ĐẦU
KIỂU DỮ LIỆU
TOÁN TỬ
NÂNG CAO
INTERVIEW
CÁC CHỦ ĐỀ
BÀI MỚI NHẤT
Dự án mới của mình là gamehow.net, mời anh em ghé thăm và góp ý ạ.

Kiểu dữ liệu Hashes trong Ruby: Hiểu từ đơn giản đến phức tạp

Trong bài này ta sẽ tìm hiểu kiểu dữ liệu Hash trong Ruby, đây là một cấu trúc dữ liệu được sử dụng để lưu trữ dữ liệu dưới dạng key - value.

Nếu bạn đã từng làm việc với một vài ngôn ngữ khác trước khi mà tìm hiểu Ruby, thì sẽ hiếm thấy một kiểu dữ liệu nào nghe tên là Hash. Mình từng làm việc với một vài ngôn ngữ như PHP, C/C++ hay Java thì chưa từng nghe đến kiểu dữ liệu này bao giờ cho đến khi tiếp xúc với Ruby.

banquyen png
Bài viết này được đăng tại freetuts.net, không được copy dưới mọi hình thức.

Đây là một kiểu dữ liệu mình thấy khá là phổ biến trong qua trình làm việc với Ruby hay framework chủ đạo của Ruby là Ruby on Rails. À nếu như bạn từng làm việc với Javascript rồi thì kiểu dữ liệu Hash này sẽ có cú pháp giống với kiểu Object

Hash trong Ruby được định nghĩa như sau:

car = {name: "bmw", year: "2013"}

hoặc bạn cũng có thể định nghĩa bằng cú pháp này đều được, cú pháp này thì cũ hơn cú pháp trên nhé, nhìn là biết về độ ngắn gọn rùi

car = {:name => "bmw", :year => "2003"}

1. Vậy tóm lại Hash là gì?

Hash là một cấu trúc dữ liệu được sử dụng để lưu trữ dữ liệu dưới dạng key - value

{ a : 1, b: 2, c: 3 }

trong đó với a, b, c được coi là key, còn 1, 2, 3 là value.

Chúng ta cũng có thể gọi Hash như là một mảng kết hợp, bởi cách lưu trữ dữ liệu của chúng không khác gì so với một mảng kết hợp cả. Hash tiện hơn so với mảng đơn thuần đó là thay vì key chỉ được lưu theo chỉ mục thì với Hash chúng ta có thể tùy ý đặt tên cho key của chúng.

Đối với việc định nghĩa một key thì chúng ta có thể khai báo dưới kiểu dữ liệu là String hoặc là Symbol, hoặc là Integer đều được hết

2. Khởi tạo một hash như thế nào

Để khởi tạo một Hash rỗng, chúng ta sử dụng từ khóa new.

car = Hash.new
=> {}

# Để kiểm tra xem đúng là Hash chưa các bạn cứ gọi đến <strong>.class</strong>

car.class
=> Hash

hoặc

book = {}
=> {}

book.class
=> Hash

để khởi tạo một Hash rỗng.

Khởi tạo Hash rỗng xong rồi thì chúng ta cũng nên biết cách để tạo các giá trị cho Hash chứ nhỉ. Chúng ta có thể khởi tạo giá trị mặc định cho một Hash, khi chúng ta truy cập vào bất cứ key nào trong Hash nếu key đó không tồn tại kết quả sẽ được trả về giá trị mặc định.

car = Hash.new("bmw")
=> {}

car[1]
=> "bmw"

car["abcdef"]
=> "bmw"

Như các bạn thấy để lấy giá trị trong Hash, bạn gọi tới như một mảng vậy, sử dụng cú pháp hashName['key'].

Nếu muốn khởi tạo cặp key - value cụ thể chúng ta có thể khai báo như sau

car = {}
=> {}

car["name"] = "bmw" // hoặc car[:name]
=> "bmw"

car["year"] = 2013 // hoặc car[:year]
=> 2013

car
=> {"name"=>"bmw", "year"=>2013}

3. Missing values

Nếu như gọi tới một key không tồn tại kết quả trả về sẽ là nil.

car["abc"]
=> nil

4. Một vài thao tác phổ biến khi sử dụng Hash

Để so sánh hai Hash với nhau các đơn giản nhất là cứ sử dụng ==

x = {a: 1, b: 2}
=> {:a=>1, :b=>2}

y = {a: 1, b:2}
=> {:a=>1, :b=>2}

x == y
=> true

Để nhận giá trị trong Hash sử dụng hash[key]

h = { "a" => 100, "b" => 200 }
puts h["a"]   #=> 100
puts h["c"]   #=> nil

Lấy tất cả các value có trong Hash

puts car
=> {"name"=>"bmw", "year"=>2013}

puts car.values
=> ["bmw", 2013]

Lấy tất cả key có trong Hash

puts car
=> {"name"=>"bmw", "year"=>2013}

puts car.keys
=> ["name", "year"]

Xóa tất cả các cặp key-value tồn tại trong Hash sử dụng clear

car.clear
=> {}

Kiểm tra một Hash có rỗng hãy không empty?

car.empty?
=> true

Chuyển kiểu Hash sang kiểu JSON sử dụng to_json. Nhưng trước hết cần phải require thư viện json vào trước thì mới có thể dùng được phương thức này.

require 'json'

car.to_json

Xóa một cặp key-value khi biết trước key sử dụng delete, khác với clear clear sẽ xóa toàn bộ tất cả các căp giá trị bên trong Hash

car.delete(:name)
=> "bmw"

p car
=> {:year=>"2013"}

Xóa phần tử đầu tiên trong hash sử dụng shift

 a= {1=>"Thomas", 2=>"Robert", 3=>"Rebecca"}
=> {1=>"Thomas", 2=>"Robert", 3=>"Rebecca"}

a.shift
=> [1, "Thomas"]

puts a
=> {2=>"Robert", 3=>"Rebecca"}

Kiểm tra sự tồn tại của một key có trong Hash sử dụng include?

car = {name: "bmw", year: "2013"}
=> {:name=>"bmw", :year=>"2013"}

car.<strong>include</strong>?(:name)
=> true

Gộp 2 hashes lại với nhau sử dụng merge

a = {1 => "Quang", 2 => "Phu"}
=> {1=>"Quang", 2=>"Phu"}

b = {3 => "Thu", 4 => "Thuy"}
=> {3=>"Thu", 4=>"Thuy"}

a.merge b
=> {1=>"Quang", 2=>"Phu", 3=>"Thu", 4=>"Thuy"}

5. Kết luận

Trên đây là những khái niệm và những thao tác cơ bản nhất khi sử dụng kiểu dữ liệu Hash trong Ruby. Khi làm việc với những dự án thực tế, việc bạn tiếp xúc và phải thao tác với kiểu dữ liệu này là rất nhiều, vậy nên hãy nắm chắc cho mình những phương thức hữu ích để khi gặp trường hợp thực tế có thể sử dụng.

Ngoài những phương thức mình nêu trên thì còn rất nhiều các phương thức khác để thao tác với Hash như select, map, reject... Thế nhưng minh sẽ tách chúng ra làm một bài khác để có thể nói hết được sức mạnh mà những phương thức kia mang lại.

Cùng chuyên mục:

Block trong Ruby

Block trong Ruby

Block là một khối lệnh được đặt trong ...

Iterator trong Ruby

Iterator trong Ruby

Ở bài trước mình có nói với các bạn về việc sử dụng các vòng…

Vòng lặp trong Ruby: Vòng lặp for / while / until / loop

Vòng lặp trong Ruby: Vòng lặp for / while / until / loop

Khi học một ngôn ngữ lập trình thì không thể không tìm hiểu tới một…

Câu lệnh điều kiện trong Ruby

Câu lệnh điều kiện trong Ruby

Trong bài này chúng ta sẽ học các lệnh điều kiện trong Ruby, đây là…

Các toán tử trong Ruby

Các toán tử trong Ruby

Nói đến toán tử thì dù bạn học ngôn ngữ nào đi nữa thì việc…

Cách sử dụng Ranges trong Ruby

Cách sử dụng Ranges trong Ruby

Ví dụ bạn cần tạo ra một dãy từ 1 đến 100 thì có thể…

Cách sử dụng Array trong Ruby

Cách sử dụng Array trong Ruby

Đây cũng là một trong những kiểu dữ liệu phổ biến nhất, vì vậy bạn…

Kiểu dữ liệu Symbol trong Ruby

Kiểu dữ liệu Symbol trong Ruby

Symbol giống như một String thế nhưng Symbol là một chuỗi bất biến nghĩa là…

Kiểu dữ liệu Text trong Ruby (còn gọi là chuỗi / string)

Kiểu dữ liệu Text trong Ruby (còn gọi là chuỗi / string)

Kiểu dữ liệu Boolean trong Ruby: True, False và Nil

Kiểu dữ liệu Boolean trong Ruby: True, False và Nil

Boolean là kiểu dữ liệu rất quan trọng, nó được dùng rất nhiều trong những…

Hiểu về Method Missing trong Ruby

Hiểu về Method Missing trong Ruby

Chắc hẳn với các lập trình viên chúng ta ai cũng có thể đôi lần…

Kiểu dữ liệu Number trong Ruby (Kiểu số Integer, Float, ...)

Kiểu dữ liệu Number trong Ruby (Kiểu số Integer, Float, ...)

Trước tiên, chúng ta cùng nhìn qua một bức ảnh tổng quát phân cấp các…

Ruby là gì? Ai đã sáng tạo ra ngôn ngữ viêm kim cương này?

Ruby là gì? Ai đã sáng tạo ra ngôn ngữ viêm kim cương này?

Từ những năm 2008, thời mà mình còn học đại học thì Ruby là ngôn…

Các loại biến và cách sử dụng Module trong Ruby

Các loại biến và cách sử dụng Module trong Ruby

Bất kì một ngôn ngữ lập trình nào đều có khái niệm biến và ruby…

Cách tạo Method - Class và Object trong Ruby

Cách tạo Method - Class và Object trong Ruby

Trong bài này mình sẽ hướng dẫn các bạn cách tạo hàm, gọi hàm. Cách…

Cú pháp trong Ruby - Chạy Hello World

Cú pháp trong Ruby - Chạy Hello World

Tổng quan về cú pháp trong ruby. Hướng dẫn tạo file và chạy hello world…

Hướng dẫn cài đặt Ruby trên Window, Linux và MacOS

Hướng dẫn cài đặt Ruby trên Window, Linux và MacOS

Hướng dẫn chi tiết cách thiết lập môi trường lập trình Ruby trên hệ điều…

Top