Ruby Hash类
在Ruby中, Hash 是一个唯一键和它们的值的集合。Hash就像一个数组,只是索引是在任何对象类型的任意键的帮助下完成的。在Hash中,通过各种迭代器返回键和它们的值的顺序是任意的,通常不会按照插入的顺序。哈希的默认值是 nil。 当用户试图访问不存在于哈希中的键时,就会返回 nil值。
类方法
1.[] : 这个方法创建一个新的哈希,用给定的对象填充。它等同于使用字面意思{Key=>value….}创建一个哈希。键和值都是成对存在的,所以有偶数个参数存在。
例子
输出
2. new : 该方法返回一个空的哈希值。如果一个哈希值随后被与哈希条目不匹配的键访问,该方法返回的值取决于用于创建哈希的 new 的样式。在第一种形式下,访问返回 nil。 如果指定了 obj ,那么这个对象将用于所有的默认值。如果指定了一个块,那么它将被哈希键和对象所调用并返回默认值。值被存储在哈希中(如果需要)取决于块。
例子
输出
3.try_convert : 该方法用于将 obj 转换成hash,并返回hash或nil。当 obj 没有转换为哈希值时,它返回nil。
例子
输出
实例方法
注意: 在下面描述的方法中, hsh 变量是哈希类的实例。
1.==: 它被称为平等性。 它用于检查两个哈希值是否相等。如果它们相等意味着它们包含相同数量的键,并且与这些键相关的值相等,那么它将返回真,否则返回假。
例子
输出
2.[] : 它被称为元素参考。它检索存储在键中的值。如果它没有找到任何值,它将返回默认值。
例子
输出
3.[]= : 它被称为元素赋值。它将value给定的值与key给定的键联系起来。
例子
输出
4.清除: 该方法从hsh中删除所有的键和它们的值。
例子
输出
5. default : 该方法返回默认值。如果hsh中不存在key,则返回hsh[key]的值。
例子
输出
6. default= : 该方法设置默认值(为一个键返回的值,不存在于哈希中)。
7.default_proc : 在这个方法中,如果Hash.new被调用时带有块。那么它将返回block,否则返回nil。
例子
输出
8.delete : 该方法用于从哈希中删除键为key的条目,并返回相应的值。如果没有找到键,那么该方法返回nil。如果给定了可选的块并且没有找到键,那么它将传递块并返回块的结果。
例子
输出
9. delete_if : 当区块为真时,该方法将键和它们的值从hsh中删除。
例子
输出
10.each: 该方法对hsh中的每个键都调用一次块,并将键和值作为参数传递。
例子
输出
each_key : 这个方法对hsh中存在的每一个键都调用一次块,并将键作为一个参数传递。
例子
输出
12. each_pair : 这个方法类似于Hash#each方法。
each_value : 这个方法对hsh中的每一个键都调用一次块,并将值作为参数传递。
例子
输出
14.empty? : 如果hsh不包含任何键和值对,该方法返回true。否则,返回false。
15. fetch : 这个方法使用给定的键从hsh中返回一个值。如果没有找到键,那么它给出的结果将取决于以下条件。
- 如果没有参数,那么它将引发一个异常。
- 如果给出了默认值,它将返回默认值。
- 如果有一个选项块存在,那么它将运行该块并返回该块的结果。
fetch方法不包含任何默认值。当哈希值被创建时,它将只关注哈希值中存在的键。
16.has_key? : 如果给定的密钥存在于hsh中,该方法返回true,否则,返回false。
例子
输出
has_value? : 如果hsh中的某个键存在给定的值,该方法返回true,否则,返回false。
例子
输出
18.include? : 这个方法与Hash#has_key?方法类似。
index : 该方法返回包含给定值的键。如果多个键包含给定的值,那么它将只返回所有键中的一个键,如果没有找到则返回nil。这是一个废弃的方法。所以我们必须使用 Hash#key 来代替。
invert : 该方法返回一个由hsh’s values作为key,key作为value创建的新的哈希值。如果发现有重复的值,那么它将只包含所有值中的一个值作为键。
例子
输出
21.key? : 这个方法类似于Hash#has_key? 。
22.keys: 该方法返回哈希中存在的键的数组。
length : 该方法返回hsh.com中键和值对的数量。
例子
输出
24. member? : 这个方法类似于Hash#has_key? 。
merge : 该方法返回包含其他hsh内容的新hash。如果指定了一个块,那么每个重复的键和它们的值都会从哈希值和存储在新的哈希值中调用。
例子
输出
26. merge!: 该方法将一个hsh的内容合并到另一个hsh中,并且用其他hsh中的重复键覆盖那些条目。
例子
输出
27. rehash : 该方法根据每个键的当前哈希值重新创建哈希。如果键的哈希值改变了,那么它将重新索引hsh。
例子
输出
28. reject : 这个方法类似于Hash#delete_if,但是它返回hsh的副本。
29. reject!: 该方法与Hash#delete_if类似,但如果没有发生变化,则返回nil。
replace : 该方法从其他hsh中替换hsh的内容。
例子
输出
31.选择: 该方法返回一个新的数组,该数组仅由一个键和值对组成,其中块中的给定条件为真。
例子
输出
shift : 这个方法从 hsh 中删除键和值对,并将它们作为一个双项数组返回。如果hsh不包含任何一对,则返回nil。
例子
输出
33. size : 这个方法与Hash#length类似。
sort : 该方法将hsh转换为包含键和其值的嵌套数组,并通过Array#sort对其进行排序。
例子
输出
35.存储: 该方法与Hash#[]=类似。
to_a : 该方法将HSH转换为包含键和其值的嵌套数组。
例子
输出
to_s : 该方法将hsh转换为字符串。换句话说,它将哈希数组,即键和值对转换为一个字符串。
38.更新: 这个方法类似于Hash#merge! 。
39. value? : 这个方法类似于Hash#has_value? 。
values : 该方法返回一个数组,其中包含hsh中的值 。
values_at : 该方法返回一个数组,其中包含指定键的值,同时也为没有找到的键提供默认值。
例子
输出
参考资料: https://docs.ruby-lang.org/en/2.0.0/Hash.html