Ruby - 雜湊表



雜湊表是一個鍵值對的集合,例如:"employee" => "salary"。它類似於陣列,但索引是透過任意型別的物件鍵進行的,而不是整數索引。

透過鍵或值遍歷雜湊表的順序可能看起來是任意的,通常不會按照插入順序排列。如果嘗試使用不存在的鍵訪問雜湊表,則方法將返回nil

建立雜湊表

與陣列一樣,建立雜湊表的方法有很多種。可以使用new類方法建立一個空雜湊表:

months = Hash.new

也可以使用new建立一個具有預設值的雜湊表,否則預設為nil

months = Hash.new( "month" )

or

months = Hash.new "month"

當訪問具有預設值的雜湊表中的任何鍵時,如果鍵或值不存在,訪問雜湊表將返回預設值:

#!/usr/bin/ruby

months = Hash.new( "month" )

puts "#{months[0]}"
puts "#{months[72]}"

這將產生以下結果:

month
month

#!/usr/bin/ruby

H = Hash["a" => 100, "b" => 200]

puts "#{H['a']}"
puts "#{H['b']}"

這將產生以下結果:

100
200

可以使用任何 Ruby 物件作為鍵或值,甚至可以使用陣列,因此以下示例是有效的:

[1,"jan"] => "January"

雜湊表內建方法

我們需要一個雜湊表物件例項才能呼叫雜湊表方法。如我們所見,以下是如何建立一個雜湊表物件例項:

Hash[[key =>|, value]* ] or

Hash.new [or] Hash.new(obj) [or]
Hash.new { |hash, key| block }

這將返回一個使用給定物件填充的新雜湊表。現在使用建立的物件,我們可以呼叫任何可用的例項方法。例如:

#!/usr/bin/ruby

$, = ", "
months = Hash.new( "month" )
months = {"1" => "January", "2" => "February"}

keys = months.keys
puts "#{keys}"

這將產生以下結果:

["1", "2"]

以下是公共雜湊表方法(假設hash是一個數組物件):

序號 方法和描述
1

hash == other_hash

測試兩個雜湊表是否相等,基於它們是否具有相同數量的鍵值對,以及鍵值對是否與每個雜湊表中對應的對匹配。

2

hash.[key]

使用鍵從雜湊表中引用值。如果找不到鍵,則返回預設值。

3

hash.[key] = value

value給出的值與key給出的鍵關聯。

4

hash.clear

刪除雜湊表中的所有鍵值對。

5

hash.default(key = nil)

返回hash的預設值,如果未由default=設定,則返回nil。([]如果鍵在hash中不存在,則返回預設值。)

6

hash.default = obj

設定hash的預設值。

7

hash.default_proc

如果hash是由塊建立的,則返回一個塊。

8

hash.delete(key) [或]

array.delete(key) { |key| block }

透過keyhash中刪除鍵值對。如果使用塊,則如果找不到對,則返回塊的結果。比較delete_if

9

hash.delete_if { |key,value| block }

對於塊計算結果為true的每個對,從hash中刪除鍵值對。

10

hash.each { |key,value| block }

迭代hash,為每個鍵呼叫一次塊,並將鍵值作為兩個元素的陣列傳遞。

11

hash.each_key { |key| block }

迭代hash,為每個鍵呼叫一次塊,將key作為引數傳遞。

12

hash.each_key { |key_value_array| block }

迭代hash,為每個key呼叫一次塊,將keyvalue作為引數傳遞。

13

hash.each_key { |value| block }

迭代hash,為每個key呼叫一次塊,將value作為引數傳遞。

14

hash.empty?

測試雜湊表是否為空(不包含鍵值對),返回truefalse

15

hash.fetch(key [, default] ) [或]

hash.fetch(key) { | key | block }

返回hash中給定key的值。如果找不到key,並且沒有其他引數,則引發IndexError異常;如果給出了default,則返回它;如果指定了可選塊,則返回其結果。

16

hash.has_key?(key) [或] hash.include?(key) [或]

hash.key?(key) [或] hash.member?(key)

測試給定的key是否在雜湊表中,返回truefalse

17

hash.has_value?(value)

測試雜湊表是否包含給定的value

18

hash.index(value)

返回雜湊表中給定valuekey,如果找不到匹配的值,則返回nil

19

hash.indexes(keys)

返回一個新陣列,其中包含給定鍵的值。將為找不到的鍵插入預設值。此方法已棄用。使用select。

20

hash.indices(keys)

返回一個新陣列,其中包含給定鍵的值。將為找不到的鍵插入預設值。此方法已棄用。使用select。

21

hash.inspect

返回雜湊表的漂亮列印字串版本。

22

hash.invert

建立一個新的hash,反轉hash中的keysvalues;也就是說,在新雜湊表中,hash的鍵成為值,值成為鍵。

23

hash.keys

建立一個包含hash鍵的新陣列。

24

hash.length

返回hash的大小或長度(整數)。

25

hash.merge(other_hash) [或]

hash.merge(other_hash) { |key, oldval, newval| block }

返回一個新雜湊表,其中包含hashother_hash的內容,用other_hash中的對覆蓋hash中具有重複鍵的對。

26

hash.merge!(other_hash) [或]

hash.merge!(other_hash) { |key, oldval, newval| block }

與merge相同,但更改是在原地進行的。

27

hash.rehash

根據每個key的當前值重建hash。如果自插入以來值已更改,則此方法會重新索引hash

28

hash.reject { |key, value| block }

block計算結果為true的每個對建立一個新的hash

29

hash.reject! { |key, value| block }

reject相同,但更改是在原地進行的。

30

hash.replace(other_hash)

hash的內容替換為other_hash的內容。

31

hash.select { |key, value| block }

返回一個新陣列,其中包含hashblock返回true的鍵值對。

32

hash.shift

hash中刪除一個鍵值對,並將其作為兩個元素的陣列返回。

33

hash.size

返回hash的大小或長度(整數)。

34

hash.sort

hash轉換為包含鍵值對陣列的二維陣列,然後將其作為陣列排序。

35

hash.store(key, value)

hash中儲存鍵值對。

36

hash.to_a

從雜湊表建立二維陣列。每個鍵/值對都轉換為陣列,所有這些陣列都儲存在一個包含陣列中。

37

hash.to_hash

返回hash(自身)。

38

hash.to_s

hash轉換為陣列,然後將該陣列轉換為字串。

39

hash.update(other_hash) [或]

hash.update(other_hash) {|key, oldval, newval| block}

返回一個新雜湊表,其中包含hashother_hash的內容,用other_hash中的對覆蓋hash中具有重複鍵的對。

40

hash.value?(value)

測試hash是否包含給定的value

41

hash.values

返回一個包含hash所有值的新陣列。

42

hash.values_at(obj, ...)

返回一個新陣列,其中包含與給定鍵關聯的hash值。

廣告
© . All rights reserved.