Computer >> Hướng Dẫn Máy Tính >  >> Lập Trình >> Ruby

Thành Thạo Hash Ruby: Định Nghĩa, Ví Dụ & Các Phương Thức Chính

Hash Ruby là gì?

Một hash là cấu trúc dữ liệu dùng để lưu trữ dữ liệu dưới dạng cặp khóa-giá trị DUY NHẤT. Khác với mảng, không có chỉ số số, bạn truy cập giá trị hash bằng khóa.

Ví dụ bao gồm:

  • Danh sách tên quốc gia & mã quốc gia tương ứng (như ES ⇾ Spain)
  • Từ điển, nơi mỗi từ có danh sách các định nghĩa có thể
  • Tên miền & địa chỉ IP của nó

Sử dụng hash trong chương trình Ruby của bạn có thể tăng tốc code khi dùng trong tình huống phù hợp.

Nói cách khác:

Bạn có dữ liệu là (hoặc có thể biến đổi thành) định dạng giống từ điển, nơi dữ liệu có thể được nhóm theo khóa & giá trị liên kết.

Cách Tạo Hash

Được.

Chúng ta nắm ý tưởng chung về hash là gì, nhưng bạn tạo nó như thế nào?

Như sau:

{}

Đó là hash rỗng!

Hash ba cặp khóa/giá trị trông như sau:

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

Nơi a là khóa, và 1 là giá trị tương ứng cho khóa đó. Chú ý các cặp khóa-giá trị được phân tách bằng dấu phẩy.

Bây giờ:

Hãy xem cách bạn có thể dùng hash trong dự án Ruby của mình với các phương thức hash phổ biến.

Lưu Giá Trị Vào Hash Ruby

Bạn có thể tạo hash với một tập giá trị ban đầu, như chúng ta đã thấy.

Ví dụ khác:

fruits = { coconut: 1, apple: 2, banana: 3 }

Tùy chọn khác là thêm giá trị mới vào hash hiện có.

Như sau:

fruits[:orange] = 4

Đây là :orange làm khóa hash, và 4 làm giá trị tương ứng.

Tại sao dấu hai chấm trước từ :orange khi truy cập giá trị & sau từ orange: khi tạo hash? Đó là cú pháp đẹp hơn cho phép tạo hash không cần symbol mũi tên (=>), cách cũ nhưng vẫn hợp lệ.

Giá trị có thể là bất kỳ đối tượng Ruby nào.

Bao gồm:

  • Chuỗi (Strings)
  • Số nguyên & Số thực (Integers & Floats)
  • Mảng (Arrays)

Khóa cũng có thể là bất cứ thứ gì, nhưng symbol (như :banana) & chuỗi là loại khóa phổ biến nhất bạn sẽ thấy.

Hãy nhớ rằng…

Khóa là duy nhất, chúng ta chỉ có thể có một khóa :orange, hoặc một khóa :apple.

Khi bạn thêm cùng khóa hai lần, bạn thay đổi giá trị của nó.

Cách Truy Cập Giá Trị Từ Hash

Bạn truy cập hash bằng khóa.

Nếu bạn cần truy cập giá trị trực tiếp, thì hash có thể không phải cấu trúc phù hợp cho dữ liệu của bạn.

Ví dụ:

fruits[:orange] # 4

Đây chính là điểm cốt lõi của hash, để tra cứu nhanh một mục bằng khóa của nó.

Nếu khóa không tồn tại, bạn sẽ nhận được nil.

fruits[:peach] # nil

Là một lựa chọn thay thế, bạn có thể dùng phương thức fetch, cho phép cung cấp giá trị mặc định.

Ví dụ:

fruits.fetch(:peach, 0)

Nếu bạn dùng fetch không có giá trị mặc định (tham số thứ 2), Ruby sẽ ném ngoại lệ KeyError.

Điều đó hữu ích vì bạn sẽ biết khóa nào bị thiếu.

Cách Gộp Hai Hash Ruby

Bạn có thể lấy hai hash & gộp chúng thành một hash mới.

Phương thức nào làm điều này?

Vâng, không khó đoán cái này. Tên phương thức là merge.

Cách dùng:

defaults = { a: 1, b: 2, c: 3 }
preferences = { c: 4 }
defaults.merge!(preferences) # {:a=>1, :b=>2, :c=>4}

Chú ý vì khóa là duy nhất, giá trị mới ghi đè giá trị cũ.

Bạn có thể dùng 사실 này cho giải pháp thú vị, như tạo hash „defaults“ mà người dùng có thể ghi đè bằng cách truyền hash của riêng họ.

Nếu bạn cần kiểm soát hơn về cách khóa được gộp, bạn có thể truyền block.

Như sau:

defaults.merge!(preferences) { |key, old, new| [old, new].max }

Nơi old là giá trị từ defaults, và new là giá trị từ preferences.

Nhiều Giá Trị Cho Một Khóa

Trong từ điển…

Từ là duy nhất, nhưng chúng có thể có nhiều giá trị (định nghĩa) liên kết với chúng.

Bạn có thể làm điều này trong Ruby!

Ví dụ:

dictionary = {
opportunity: [
"a set of circumstances that makes it possible to do something",
"a situation or condition favorable for attainment of a goal"
],
creativity: [
"the use of imagination or original ideas to create something new",
"the ability to create",
"the process where new ideas emerge from combining existing ideas in new ways"
]
}
dictionary[:creativity][1]

Nơi dictionary[:creativity] cho bạn một mảng & [1] cho phần tử thứ 2 từ mảng đó.

Nói cách khác:

Khóa là symbol & giá trị là mảng. Khi bạn truy cập hash bạn nhận lại mảng mà bạn truy cập bình thường, như bất kỳ mảng nào khác.

Cách Sắp Xếp Hash

Bạn có thể sắp xếp mảng. Nhưng bạn có biết bạn cũng có thể sắp xếp hash?

Khi bạn sort một hash, nó được sắp xếp theo khóa.

Ví dụ:

{ b: 1, a: 2 }.sort # [[:a, 2], [:b, 1]]

Nhưng bạn cũng có thể sắp xếp theo giá trị:

{ c: 3, b: 1, a: 2 }.sort_by(&:last)

Bạn sẽ nhận thấy kết quả từ sắp xếp hash không phải là hash khác…

Đó là một mảng!

Nhưng bạn có thể chuyển mảng này ngược lại thành hash, dùng phương thức to_h.

Lấy Tất Cả Khóa & Giá Trị Từ Hash

Nếu bạn muốn danh sách tất cả khóa hash, tin tốt, có phương thức cho điều đó!

Đây là nó:

{ apple: 1, banana: 2 }.keys # [:apple, :banana]

Cũng có phương thức cho bạn mảng chứa các giá trị:

{ apple: 1, banana: 2 }.values # [1, 2]

Nếu bạn muốn biết khóa có tồn tại trong hash không, thay vì lấy mảng chúng, dùng phương thức key?.

Phương thức này trả về giá trị true hoặc false.

Tóm Tắt

Bạn đã học về hash Ruby, một cấu trúc dữ liệu hữu ích bao gồm các cặp khóa-giá trị. Bạn cũng học cách truy cập hash bằng khóa, và cách lưu dữ liệu mới vào hash.

Bây giờ hãy mở irb (hoặc pry) & bắt đầu chơi với hash!

Cảm ơn bạn đã đọc 🙂