Ruby - Hashes
Hash to zbiór par klucz-wartość, takich jak ta: „pracownik” => „wynagrodzenie”. Jest podobny do Array, z tym wyjątkiem, że indeksowanie odbywa się za pomocą dowolnych kluczy dowolnego typu obiektu, a nie indeksu liczb całkowitych.
Kolejność, w jakiej przechodzisz przez skrót według klucza lub wartości, może wydawać się arbitralna i zazwyczaj nie występuje w kolejności wstawiania. Jeśli spróbujesz uzyskać dostęp do skrótu za pomocą klucza, który nie istnieje, metoda zwróci nil .
Tworzenie skrótów
Podobnie jak w przypadku tablic, istnieje wiele sposobów tworzenia skrótów. Możesz utworzyć pusty hash za pomocą nowej metody klasy -
months = Hash.new
Możesz również użyć new, aby utworzyć skrót z wartością domyślną, która w przeciwnym razie jest po prostu zerowa -
months = Hash.new( "month" )
or
months = Hash.new "month"
Kiedy uzyskujesz dostęp do dowolnego klucza w skrócie, który ma wartość domyślną, jeśli klucz lub wartość nie istnieje, dostęp do skrótu zwróci wartość domyślną -
#!/usr/bin/ruby
months = Hash.new( "month" )
puts "#{months[0]}"
puts "#{months[72]}"
To da następujący wynik -
month
month
#!/usr/bin/ruby
H = Hash["a" => 100, "b" => 200]
puts "#{H['a']}"
puts "#{H['b']}"
To da następujący wynik -
100
200
Możesz użyć dowolnego obiektu Ruby jako klucza lub wartości, nawet tablicy, więc poniższy przykład jest prawidłowy -
[1,"jan"] => "January"
Wbudowane metody skrótu
Musimy mieć instancję obiektu Hash, aby wywołać metodę Hash. Jak widzieliśmy, oto sposób tworzenia instancji obiektu Hash -
Hash[[key =>|, value]* ] or
Hash.new [or] Hash.new(obj) [or]
Hash.new { |hash, key| block }
To zwróci nowy hash wypełniony podanymi obiektami. Teraz korzystając z utworzonego obiektu, możemy wywołać dowolne dostępne metody instancji. Na przykład -
#!/usr/bin/ruby
$, = ", "
months = Hash.new( "month" )
months = {"1" => "January", "2" => "February"}
keys = months.keys
puts "#{keys}"
To da następujący wynik -
["1", "2"]
Poniżej przedstawiono publiczne metody haszowania (zakładając, że hash jest obiektem tablicy) -
Sr.No. | Metody i opis |
---|---|
1 | hash == other_hash Sprawdza, czy dwa skróty są równe, na podstawie tego, czy mają taką samą liczbę par klucz-wartość i czy pary klucz-wartość pasują do odpowiedniej pary w każdym skrócie. |
2 | hash.[key] Używając klucza, odwołuje się do wartości z skrótu. Jeśli klucz nie zostanie znaleziony, zwraca wartość domyślną. |
3 | hash.[key] = value Kojarzy wartość podaną przez wartość z kluczem podanym przez klucz . |
4 | hash.clear Usuwa wszystkie pary klucz-wartość z skrótu. |
5 | hash.default(key = nil) Zwraca domyślną wartość hash , nil, jeśli nie jest ustawiona domyślnie =. ([] zwraca wartość domyślną, jeśli klucz nie istnieje w skrócie ). |
6 | hash.default = obj Ustawia domyślną wartość skrótu . |
7 | hash.default_proc Zwraca blok, jeśli hash został utworzony przez blok. |
8 | hash.delete(key) [or] array.delete(key) { |key| block } Usuwa parę klucz-wartość z skrótu według klucza . Jeśli używany jest blok, zwraca wynik bloku, jeśli para nie zostanie znaleziona. Porównaj delete_if . |
9 | hash.delete_if { |key,value| block } Usuwa parę klucz-wartość z skrótu dla każdej pary, którą blok ocenia jako true . |
10 | hash.each { |key,value| block } Iteruje po hashu , wywołując blok raz dla każdego klucza, przekazując klucz-wartość jako dwuelementową tablicę. |
11 | hash.each_key { |key| block } Iteruje po hashu , wywołując blok raz dla każdego klucza, przekazując klucz jako parametr. |
12 | hash.each_key { |key_value_array| block } Iteruje po hashu , wywołując blok raz dla każdego klucza , przekazując klucz i wartość jako parametry. |
13 | hash.each_key { |value| block } Iteruje po hashu , wywołując blok raz dla każdego klucza i przekazując wartość jako parametr. |
14 | hash.empty? Sprawdza, czy hash jest pusty (nie zawiera par klucz-wartość), zwraca wartość prawda lub fałsz . |
15 | hash.fetch(key [, default] ) [or] hash.fetch(key) { | key | block } Zwraca wartość z skrótu dla danego klucza . Jeśli nie można znaleźć klucza i nie ma innych argumentów, zgłasza wyjątek IndexError ; jeśli podano wartość domyślną, jest ona zwracana; jeśli określono opcjonalny blok, zwracany jest jego wynik. |
16 | hash.has_key?(key) [or] hash.include?(key) [or] hash.key?(key) [or] hash.member?(key) Sprawdza, czy dany klucz jest obecny w hashu, zwracając wartość true lub false . |
17 | hash.has_value?(value) Sprawdza, czy hash zawiera daną wartość . |
18 | hash.index(value) Zwraca klucz dla podanej wartości w skrócie, nil, jeśli nie zostanie znaleziona pasująca wartość. |
19 | hash.indexes(keys) Zwraca nową tablicę składającą się z wartości dla podanych kluczy. Wstawi wartość domyślną dla kluczy, które nie zostały znalezione. Ta metoda jest przestarzała. Użyj wybierz. |
20 | hash.indices(keys) Zwraca nową tablicę składającą się z wartości dla podanych kluczy. Wstawi wartość domyślną dla kluczy, które nie zostały znalezione. Ta metoda jest przestarzała. Użyj wybierz. |
21 | hash.inspect Zwraca ładną wersję skrótu w postaci łańcucha znaków. |
22 | hash.invert Tworzy nowy hash , odwracając klucze i wartości z hasha ; to znaczy w nowym skrócie klucze z skrótu stają się wartościami, a wartości stają się kluczami. |
23 | hash.keys Tworzy nową tablicę z kluczami z skrótu . |
24 | hash.length Zwraca rozmiar lub długość skrótu jako liczbę całkowitą. |
25 | hash.merge(other_hash) [or] hash.merge(other_hash) { |key, oldval, newval| block } Zwraca nowy hash zawierający zawartość hash i other_hash , nadpisując pary w hashu zduplikowanymi kluczami przez te z other_hash . |
26 | hash.merge!(other_hash) [or] hash.merge!(other_hash) { |key, oldval, newval| block } To samo co scalanie, ale zmiany są wprowadzane na miejscu. |
27 | hash.rehash Odbudowuje skrót na podstawie bieżących wartości każdego klucza . Jeśli wartości zmieniły się od czasu ich wstawienia, ta metoda ponownie indeksuje skrót . |
28 | hash.reject { |key, value| block } Tworzy nowy hash dla każdej pary, którą blok ocenia jako true |
29 | hash.reject! { |key, value| block } To samo, co odrzucenie , ale zmiany są wprowadzane. |
30 | hash.replace(other_hash) Zastępuje zawartość hasha zawartością other_hash . |
31 | hash.select { |key, value| block } Zwraca nową tablicę składającą się z par klucz-wartość z skrótu, dla którego blok zwraca wartość true . |
32 | hash.shift Usuwa parę klucz-wartość z skrótu , zwracając ją jako tablicę dwuelementową. |
33 | hash.size Zwraca rozmiar lub długość skrótu jako liczbę całkowitą. |
34 | hash.sort Konwertuje hash na dwuwymiarową tablicę zawierającą tablice par klucz-wartość, a następnie sortuje ją jako tablicę. |
35 | hash.store(key, value) Przechowuje parę klucz-wartość w skrócie . |
36 | hash.to_a Tworzy dwuwymiarową tablicę na podstawie skrótu. Każda para klucz / wartość jest konwertowana na tablicę, a wszystkie te tablice są przechowywane w tablicy zawierającej. |
37 | hash.to_hash Zwraca hash (self). |
38 | hash.to_s Konwertuje hash na tablicę, a następnie konwertuje tę tablicę na ciąg. |
39 | hash.update(other_hash) [or] hash.update(other_hash) {|key, oldval, newval| block} Zwraca nowy hash zawierający zawartość hash i other_hash , nadpisując pary w hashu zduplikowanymi kluczami przez te z other_hash . |
40 | hash.value?(value) Sprawdza, czy hash zawiera daną wartość . |
41 | hash.values Zwraca nową tablicę zawierającą wszystkie wartości skrótu . |
42 | hash.values_at(obj, ...) Zwraca nową tablicę zawierającą wartości z skrótu, które są skojarzone z danym kluczem lub kluczami. |