Ruby - Hashes(哈希)

Ruby - Hashes(哈希) 首页 / Ruby入门教程 / Ruby - Hashes(哈希)

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

通过键或值遍历散列的顺序是任意的,并且通常不会按插入顺序。如果尝试使用不存在的键访问哈希,则该方法将返回 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对象的来调用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"]

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

Sr.No.Methods & Remark
1

hash== other_hash

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

2

hash.[key]

使用键,从哈希引用值。如果找不到key,则返回默认值。

3

hash.[key] =value

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

4

hash.clear

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

5

hash.default(key=nil)

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

6

hash.default=obj

为哈希设置默认值。

7

hash.default_proc

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

8

hash.delete(key)[or]

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

通过 key 从 hash 中删除键/值对。如果使用块,则在未找到对的情况下返回块的输出。比较 delete_if 。

9

hash.delete_if {|key,value|block}

对于块判断为 true 的每一对,从 hash 中删除键/值对。

10

hash.each {|key,value| block}

遍历 hash ,对每个键调用一次该块,将键值作为两个元素的数组传递。

11

hash.each_key {| key | block}

遍历哈希,为每个键调用一次块,并通过 key 作为参数。

12

hash.each_key {| key_value_array | block}

遍历哈希,为每个 key 调用一次块,将 key 和 value 作为参数传递。

13

hash.each_key {|value| block}

遍历哈希,为每个键调用一次块,并传递 value 作为参数。

14

hash.empty?

哈希是否为空(不包含键/值对),并返回 true 或 false 。

15

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

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

从哈希返回给定 key 的值。如果找不到键,并且没有其他参数,则会引发 IndexError 异常;如果给出了 default ,则返回它;

16

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

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

给定的 key 是否存在于哈希中,并返回 true 或 false 。

17

hash.has_value?(value)

哈希是否包含给定的值。

链接:https://www.learnfk.comhttps://www.learnfk.com/ruby/ruby-hashes.html

来源:LearnFk无涯教程网

18

hash.index(value)

为哈希中给定的值返回键,如果未找到匹配值,则返回 nil

19

hash.indexes(keys)

返回一个由给定键的值组成的新数组。将为找不到的键插入默认值。

20

hash.indices(keys)

返回一个由给定键的值组成的新数组。将为找不到的键插入默认值。

21

hash.inspect

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

22

hash.invert

创建一个新的 hash ,从 hash 反转键和值;也就是说,在新的哈希中,哈希中的键成为值,而值成为键。

23

hash.keys

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

24

hash.length

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

25

hash.merge(other_hash)[or]

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

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

26

hash.merge!(other_hash)[or]

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

与merge相同。

27

hash.rehash

根据每个键的当前值重建哈希。如果值自插入以来已更改,则此方法重新索引哈希。

28

hash.reject {|key,value|block}

为 block 判断为 true 的每一对创建一个新的 hash

29

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

与reject相同,但已进行更改。

30

hash.replace(other_hash)

用 other_hash 的内容替换 hash 的内容。

31

hash.select {|key,value|block}

返回一个新数组,该数组由 hash 的键值对组成,而 block 为其返回 true 。

32

hash.shift

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

33

hash.size

以整数形式返回 size 或 hash 的长度。

34

hash.sort

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

35

hash.store(key,value)

将键值对存储在哈希中。

36

hash.to_a

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

37

hash.to_hash

返回哈希。

38

hash.to_s

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

39

hash.update(other_hash)[or]

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

返回一个包含 hash 和 other_hash 内容的新哈希,用与 other_hash 。

40

hash.value?(value)

测试哈希是否包含给定的值。

41

hash.values

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

42

hash.values_at(obj,...)

返回一个新数组,其中包含来自 hash 的与给定键或键相关联的值。

祝学习愉快!(内容编辑有误?请选中要编辑内容 -> 右键 -> 修改 -> 提交!)

技术教程推荐

邱岳的产品实战 -〔邱岳〕

算法面试通关40讲 -〔覃超〕

后端存储实战课 -〔李玥〕

Service Mesh实战 -〔马若飞〕

软件设计之美 -〔郑晔〕

HarmonyOS快速入门与实战 -〔QCon+案例研习社〕

Tony Bai · Go语言第一课 -〔Tony Bai〕

eBPF核心技术与实战 -〔倪朋飞〕

AI 应用实战课 -〔黄佳〕

好记忆不如烂笔头。留下您的足迹吧 :)