哈希是键值对(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 中删除键/值对。 链接:https://www.learnfk.comhttps://www.learnfk.com/ruby/ruby-hashes.html 来源:LearnFk无涯教程网 |
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) 哈希是否包含给定的值。 |
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 的与给定键或键相关联的值。 |
祝学习愉快!(内容编辑有误?请选中要编辑内容 -> 右键 -> 修改 -> 提交!)
Python实战 · 从0到1搭建直播视频平台 -〔Barry〕