Ruby - băm
Hash là một tập hợp các cặp khóa-giá trị như sau: "nhân viên" => "lương". Nó tương tự như Mảng, ngoại trừ việc lập chỉ mục được thực hiện thông qua các khóa tùy ý của bất kỳ loại đối tượng nào, không phải chỉ mục số nguyên.
Thứ tự mà bạn duyệt qua một hàm băm theo khóa hoặc giá trị có vẻ tùy ý và thường sẽ không theo thứ tự chèn. Nếu bạn cố gắng truy cập vào hàm băm có khóa không tồn tại, phương thức sẽ trả về nil .
Tạo mã băm
Như với mảng, có nhiều cách khác nhau để tạo hàm băm. Bạn có thể tạo một hàm băm trống bằng phương thức lớp mới -
months = Hash.new
Bạn cũng có thể sử dụng new để tạo một băm với giá trị mặc định, nếu không thì chỉ là nil -
months = Hash.new( "month" )
or
months = Hash.new "month"
Khi bạn truy cập bất kỳ khóa nào trong hàm băm có giá trị mặc định, nếu khóa hoặc giá trị không tồn tại, việc truy cập vào hàm băm sẽ trả về giá trị mặc định -
#!/usr/bin/ruby
months = Hash.new( "month" )
puts "#{months[0]}"
puts "#{months[72]}"
Điều này sẽ tạo ra kết quả sau:
month
month
#!/usr/bin/ruby
H = Hash["a" => 100, "b" => 200]
puts "#{H['a']}"
puts "#{H['b']}"
Điều này sẽ tạo ra kết quả sau:
100
200
Bạn có thể sử dụng bất kỳ đối tượng Ruby nào làm khóa hoặc giá trị, thậm chí là một mảng, vì vậy ví dụ sau là một ví dụ hợp lệ:
[1,"jan"] => "January"
Phương thức băm tích hợp
Chúng ta cần có một thể hiện của đối tượng Hash để gọi một phương thức Hash. Như chúng ta đã thấy, sau đây là cách tạo một thể hiện của đối tượng Hash:
Hash[[key =>|, value]* ] or
Hash.new [or] Hash.new(obj) [or]
Hash.new { |hash, key| block }
Thao tác này sẽ trả về một hàm băm mới với các đối tượng đã cho. Bây giờ bằng cách sử dụng đối tượng đã tạo, chúng ta có thể gọi bất kỳ phương thức cá thể nào có sẵn. Ví dụ -
#!/usr/bin/ruby
$, = ", "
months = Hash.new( "month" )
months = {"1" => "January", "2" => "February"}
keys = months.keys
puts "#{keys}"
Điều này sẽ tạo ra kết quả sau:
["1", "2"]
Sau đây là các phương thức băm công khai (giả sử băm là một đối tượng mảng):
Sr.No. | Phương pháp & Mô tả |
---|---|
1 | hash == other_hash Kiểm tra xem hai hàm băm có bằng nhau hay không, dựa trên việc chúng có cùng số lượng cặp khóa-giá trị và liệu các cặp khóa-giá trị có khớp với cặp tương ứng trong mỗi hàm băm hay không. |
2 | hash.[key] Sử dụng một khóa, tham chiếu đến một giá trị từ hàm băm. Nếu không tìm thấy khóa, trả về giá trị mặc định. |
3 | hash.[key] = value Liên kết giá trị được cung cấp bởi giá trị với khóa được cung cấp bởi khóa . |
4 | hash.clear Xóa tất cả các cặp khóa-giá trị khỏi hàm băm. |
5 | hash.default(key = nil) Trả về giá trị mặc định cho băm , nil nếu không được đặt theo mặc định =. ([] trả về giá trị mặc định nếu khóa không tồn tại trong hàm băm .) |
6 | hash.default = obj Đặt giá trị mặc định cho hàm băm . |
7 | hash.default_proc Trả về một khối nếu băm được tạo bởi một khối. |
số 8 | hash.delete(key) [or] array.delete(key) { |key| block } Xóa cặp khóa-giá trị khỏi băm theo khóa . Nếu khối được sử dụng, trả về kết quả của khối nếu không tìm thấy cặp. So sánh delete_if . |
9 | hash.delete_if { |key,value| block } Xóa một cặp khóa-giá trị khỏi hàm băm cho mọi cặp mà khối đánh giá là true . |
10 | hash.each { |key,value| block } Lặp lại trên băm , gọi khối một lần cho mỗi khóa, chuyển khóa-giá trị dưới dạng mảng hai phần tử. |
11 | hash.each_key { |key| block } Lặp lại quá trình băm , gọi khối một lần cho mỗi khóa, chuyển khóa làm tham số. |
12 | hash.each_key { |key_value_array| block } Lặp lại trên băm , gọi khối một lần cho mỗi khóa , chuyển khóa và giá trị dưới dạng tham số. |
13 | hash.each_key { |value| block } Lặp lại hàm băm , gọi khối một lần cho mỗi khóa , chuyển giá trị dưới dạng tham số. |
14 | hash.empty? Kiểm tra xem băm có trống không (không chứa cặp khóa-giá trị), trả về true hay false . |
15 | hash.fetch(key [, default] ) [or] hash.fetch(key) { | key | block } Trả về một giá trị từ hàm băm cho khóa đã cho . Nếu chìa khóa không thể được tìm thấy, và không có lý lẽ khác, nó đặt ra một IndexError ngoại lệ; nếu mặc định được đưa ra, nó được trả về; nếu khối tùy chọn được chỉ định, kết quả của nó được trả về. |
16 | hash.has_key?(key) [or] hash.include?(key) [or] hash.key?(key) [or] hash.member?(key) Kiểm tra xem một khóa nhất định có trong hàm băm, trả về true hay false . |
17 | hash.has_value?(value) Kiểm tra xem hàm băm có chứa giá trị đã cho hay không . |
18 | hash.index(value) Trả về khóa cho giá trị đã cho trong hàm băm, nil nếu không tìm thấy giá trị phù hợp. |
19 | hash.indexes(keys) Trả về một mảng mới bao gồm các giá trị cho (các) khóa đã cho. Sẽ chèn giá trị mặc định cho các khóa không được tìm thấy. Phương pháp này không được dùng nữa. Sử dụng lựa chọn. |
20 | hash.indices(keys) Trả về một mảng mới bao gồm các giá trị cho (các) khóa đã cho. Sẽ chèn giá trị mặc định cho các khóa không được tìm thấy. Phương pháp này không được dùng nữa. Sử dụng lựa chọn. |
21 | hash.inspect Trả về một phiên bản chuỗi in đẹp của băm. |
22 | hash.invert Tạo một hàm băm mới , đảo ngược các khóa và giá trị từ hàm băm ; nghĩa là, trong hàm băm mới, các khóa từ hàm băm trở thành giá trị và giá trị trở thành khóa. |
23 | hash.keys Tạo một mảng mới với các khóa từ băm . |
24 | hash.length Trả về kích thước hoặc độ dài của hàm băm dưới dạng số nguyên. |
25 | hash.merge(other_hash) [or] hash.merge(other_hash) { |key, oldval, newval| block } Trả về một băm mới có chứa nội dung của băm và other_hash , ghi đè các cặp trong băm bằng các khóa trùng lặp với các khóa từ other_hash . |
26 | hash.merge!(other_hash) [or] hash.merge!(other_hash) { |key, oldval, newval| block } Tương tự như hợp nhất, nhưng các thay đổi được thực hiện tại chỗ. |
27 | hash.rehash Xây dựng lại băm dựa trên các giá trị hiện tại cho mỗi khóa . Nếu các giá trị đã thay đổi kể từ khi chúng được chèn, phương pháp này lập chỉ mục lại hàm băm . |
28 | hash.reject { |key, value| block } Tạo một hàm băm mới cho mọi cặp mà khối đánh giá là true |
29 | hash.reject! { |key, value| block } Same as reject, but changes are made in place. |
30 | hash.replace(other_hash) Replaces the contents of hash with the contents of other_hash. |
31 | hash.select { |key, value| block } Returns a new array consisting of key-value pairs from hash for which the block returns true. |
32 | hash.shift Removes a key-value pair from hash, returning it as a two-element array. |
33 | hash.size Returns the size or length of hash as an integer. |
34 | hash.sort Converts hash to a two-dimensional array containing arrays of key-value pairs, then sorts it as an array. |
35 | hash.store(key, value) Stores a key-value pair in hash. |
36 | hash.to_a Creates a two-dimensional array from hash. Each key/value pair is converted to an array, and all these arrays are stored in a containing array. |
37 | hash.to_hash Returns hash (self). |
38 | hash.to_s Converts hash to an array, then converts that array to a string. |
39 | hash.update(other_hash) [or] hash.update(other_hash) {|key, oldval, newval| block} Returns a new hash containing the contents of hash and other_hash, overwriting pairs in hash with duplicate keys with those from other_hash. |
40 | hash.value?(value) Tests whether hash contains the given value. |
41 | hash.values Returns a new array containing all the values of hash. |
42 | hash.values_at(obj, ...) Returns a new array containing the values from hash that are associated with the given key or keys. |