Ruby - 哈希


哈希是键值对的集合,如下所示:“employee”=>“salary”。它类似于数组,不同之处在于索引是通过任何对象类型的任意键而不是整数索引完成的。

通过键或值遍历哈希的顺序可能看起来是任意的,并且通常不符合插入顺序。如果您尝试使用不存在的键访问哈希,该方法将返回nil

创建哈希

与数组一样,有多种方法可以创建哈希值。您可以使用新的类方法创建一个空哈希-

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 对象的实例来调用 Hash 方法。正如我们所看到的,以下是创建 Hash 对象实例的方法 -

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"]

以下是公共哈希方法(假设哈希是一个数组对象) -

先生。 方法与说明
1

哈希 == 其他哈希

根据两个哈希是否具有相同数量的键值对以及键值对是否与每个哈希中的相应对匹配来测试两个哈希是否相等。

2

散列键]

使用键引用散列中的值。如果未找到该键,则返回默认值。

3

哈希值。[键] = 值

将value给出的值与key给出的键相关联。

4

哈希.清除

从哈希中删除所有键值对。

5

hash.default(key = nil)

返回hash的默认值,如果 default= 未设置则返回 nil。(如果hash中不存在该键,[] 返回默认值。)

6

hash.default = obj

设置hash的默认值。

7

hash.default_proc

如果哈希是由块创建的,则返回块。

8

hash.delete(key) [或]

数组.delete(key) { |key| 堵塞 }

按 key从哈希删除键值对。如果使用块,则在未找到对时返回块的结果。比较delete_if

9

hash.delete_if { |键,值| 堵塞 }

对于块评估为true 的每一对,从哈希中删除一个键值对。

10

hash.each { |键,值| 堵塞 }

迭代hash,为每个键调用一次块,并将键值作为二元素数组传递。

11

hash.each_key { |key| 堵塞 }

迭代hash,为每个键调用一次块,并将作为参数传递。

12

hash.each_key { |key_value_array| 堵塞 }

迭代hash ,为每个key调用一次块,并将keyvalue作为参数传递。

13

hash.each_key { |值| 堵塞 }

迭代hash ,为每个key调用一次块,并将作为参数传递。

14

哈希.空?

测试 hash 是否为空(不包含键值对),返回truefalse

15

hash.fetch(key [, 默认] ) [或]

hash.fetch(key) { | 关键| 堵塞 }

返回给定key的哈希值。如果找不到键,并且没有其他参数,则会引发IndexError异常;如果给出默认值,则返回;如果指定了可选块,则返回其结果。

16

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

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

测试给定的是否存在于哈希中,返回truefalse

17 号

hash.has_value?(值)

测试 hash 是否包含给定

18

散列索引(值)

返回哈希中给定值的,如果没有找到匹配值则返回nil 。

19

hash.indexes(键)

返回一个由给定键的值组成的新数组。将为未找到的键插入默认值。此方法已被弃用。使用选择。

20

散列索引(键)

返回一个由给定键的值组成的新数组。将为未找到的键插入默认值。此方法已被弃用。使用选择。

21

哈希检查

返回哈希的漂亮打印字符串版本。

22

哈希反转

创建一个新的哈希,反转哈希中的也就是说,在新的哈希中,哈希中的键变成值,值变成键。

23

哈希键

使用hash中的键创建一个新数组。

24

哈希长度

以整数形式返回哈希的大小或长度。

25

hash.merge(other_hash) [或]

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

返回一个包含hashother_hash内容的新哈希,用other_hash中的重复键覆盖 hash 中的对。

26

hash.merge!(other_hash) [或]

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

与合并相同,但更改是就地完成的。

27

哈希重新哈希

根据每个的当前值重建哈希。如果值在插入后发生了变化,则此方法会重新索引hash

28

hash.reject { |键,值| 堵塞 }

为块评估为true的每一对创建一个新的哈希值

29

哈希.拒绝!{ |键,值| 堵塞 }

与拒绝相同,但进行了适当的更改。

30

hash.replace(other_hash)

将hash的内容替换为other_hash的内容。

31

hash.select { |键,值| 堵塞 }

返回一个新数组,该数组由块返回true的哈希中的键值对组成。

32

哈希移位

从hash中删除键值对,并将其作为二元素数组返回。

33

散列大小

以整数形式返回哈希的大小或长度。

34

哈希排序

将hash转换为包含键值对数组的二维数组,然后将其作为数组进行排序。

35

hash.store(键, 值)

在hash中存储键值对。

36

哈希.to_a

从哈希创建二维数组。每个键/值对都被转换为一个数组,所有这些数组都存储在一个包含数组中。

37

哈希值到哈希值

返回哈希值(自身)。

38

hash.to_s

将哈希转换为数组,然后将该数组转换为字符串。

39

hash.update(other_hash) [或]

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

返回一个包含hashother_hash内容的新哈希,用other_hash中的重复键覆盖hash中的对。

40

哈希值?(值)

测试hash是否包含给定

41

哈希值

返回一个包含hash的所有值的新数组。

42

hash.values_at(obj, ...)

返回一个新数组,其中包含与给定键关联的哈希值。