- Ruby 基础
- Ruby - 首页
- Ruby - 概述
- Ruby - 环境搭建
- Ruby - 语法
- Ruby - 类和对象
- Ruby - 变量
- Ruby - 运算符
- Ruby - 注释
- Ruby - IF...ELSE
- Ruby - 循环
- Ruby - 方法
- Ruby - 块
- Ruby - 模块
- Ruby - 字符串
- Ruby - 数组
- Ruby - 哈希表
- Ruby - 日期和时间
- Ruby - 范围
- Ruby - 迭代器
- Ruby - 文件 I/O
- Ruby - 异常
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 } 通过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 } 迭代hash,为每个键调用一次块,将key作为参数传递。 |
12 | hash.each_key { |key_value_array| block } 迭代hash,为每个key调用一次块,将key和value作为参数传递。 |
13 | hash.each_key { |value| block } 迭代hash,为每个key调用一次块,将value作为参数传递。 |
14 | hash.empty? 测试哈希表是否为空(不包含键值对),返回true或false。 |
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是否在哈希表中,返回true或false。 |
17 | hash.has_value?(value) 测试哈希表是否包含给定的value。 |
18 | hash.index(value) 返回哈希表中给定value的key,如果找不到匹配的值,则返回nil。 |
19 | hash.indexes(keys) 返回一个新数组,其中包含给定键的值。将为找不到的键插入默认值。此方法已弃用。使用select。 |
20 | hash.indices(keys) 返回一个新数组,其中包含给定键的值。将为找不到的键插入默认值。此方法已弃用。使用select。 |
21 | hash.inspect 返回哈希表的漂亮打印字符串版本。 |
22 | hash.invert 创建一个新的hash,反转hash中的keys和values;也就是说,在新哈希表中,hash的键成为值,值成为键。 |
23 | hash.keys 创建一个包含hash键的新数组。 |
24 | hash.length 返回hash的大小或长度(整数)。 |
25 | hash.merge(other_hash) [或] hash.merge(other_hash) { |key, oldval, newval| block } 返回一个新哈希表,其中包含hash和other_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 } 返回一个新数组,其中包含hash中block返回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} 返回一个新哈希表,其中包含hash和other_hash的内容,用other_hash中的对覆盖hash中具有重复键的对。 |
40 | hash.value?(value) 测试hash是否包含给定的value。 |
41 | hash.values 返回一个包含hash所有值的新数组。 |
42 | hash.values_at(obj, ...) 返回一个新数组,其中包含与给定键关联的hash值。 |