Hash 表是一种和数组比较类似的数据构造形式。
Hash 表的生成
Hash 表也称为关联数组。和数组不同的是,作为取出数值 的主键(相当于数组的附加码),可以使用任意的对象。 在 {} 符号中间排列多个单元就生成了一个哈希表。
a = {"艾力克斯"=>2000, "杰克"=>2003}
这个例子中,"艾力克斯" 和 "杰克" 就是取出数值的主 键,2000 和 2003 就是实际的数值。这样, 使用 => 符号把主键和数值连接起来就形成了 Hash 表。
要取出 Hash 表中对象的时候,应按如下操作。
a = {"艾力克斯"=>2000, "杰克"=>2003}
p a["艾力克斯"] # => 2000
p a["杰克"] # => 2003
p a["宇佐助"] # => nil
从上例最后一行可以得知,当指定主键不存在时就会返回 nil。
这里是以字符串为主键,当然不使用字符串也可以。作为主键还可以使用整数等其它数据类型,在有很多编号单元的情况下使用哈希表会比使用数组更加方便。
另外,哈希表的反操作,也就是「检查与数值对应的主键」的情况下,在 [] 中写入数值是不能得到其主键的。这里不再多作陈述,该种操作方法我们会在后面特别介绍。
Hash 表数值的添加
实际操作中,Hash 表可以在程序中直接指定数据建立, 亦可以使用先建立一个空的 Hash 表然后向其中添加单元数据等多种方法生成。 生成一个空的 Hash 表只需写入 {} 就行了。
a = {}
向 Hash 表中添加数值,和数组单元的重赋值完全相同。
a = {}
a["艾力克斯"] = 2000
p a # => {"艾力克斯"=>2000}
Hash 表的操作
Hash 表是 Hash 类的对象。 同数组一样,可以调用这个类定义的方法对数据进行操作。
比如要从 Hash 表中删除数值的话,就要使用 delete 方法。
a = {"艾力克斯"=>2000, "杰克"=>2003}
a.delete("杰克")
p a # => {"艾力克斯"=>2000}
想知道 Hash 表中是否含有某个特定主键的情况下,就要使用 include? 方法。
a = {"艾力克斯"=>2000, "杰克"=>2003}
p a.include?("艾力克斯") # => true
p a.include?("宇佐助") # => false
第三行中使用 include? 方法,是确认哈希表中是否含有主键 "艾力克斯"。上例在第一行生成哈希表时主键设定有 "艾力克斯",所以输出结果为 true(真)。同样第四行是确认哈希表中是否含有主键 "宇佐助"。然而这个主键在哈希表中是不存在的,所以输出结果就为 false(伪)。
Hash 表的循环
在 Hash 类中,有取得全部主键排列的 keys 方法。
a = {3=>6, 4=>10, 5=>15}
p a.keys # => [5, 3, 4]
这样,=> 左侧的主键会全部排列出来。 但 Hash 表中是没有顺序的,所以排列会无顺序可言。
前节中,我们学习了使用 for 循环指定数组的方法。 现在让我们来用 for 循环指定 keys 方法的返回值,作成 Hash 表主键的循环吧。
a = {3=>6, 4=>10, 5=>15}
for k in a.keys
p k
end
运行上例就会按不同顺序显示 3、4、5。
而且,使用 values 方法的话,还能取得 Hash 表全部数值的排列。
a = {3=>6, 4=>10, 5=>15}
for v in a.values
p v
end
运行上例就会按不同顺序显示 6、10、15。
Hash 表的生成
Hash 表也称为关联数组。和数组不同的是,作为取出数值 的主键(相当于数组的附加码),可以使用任意的对象。 在 {} 符号中间排列多个单元就生成了一个哈希表。
a = {"艾力克斯"=>2000, "杰克"=>2003}
这个例子中,"艾力克斯" 和 "杰克" 就是取出数值的主 键,2000 和 2003 就是实际的数值。这样, 使用 => 符号把主键和数值连接起来就形成了 Hash 表。
要取出 Hash 表中对象的时候,应按如下操作。
a = {"艾力克斯"=>2000, "杰克"=>2003}
p a["艾力克斯"] # => 2000
p a["杰克"] # => 2003
p a["宇佐助"] # => nil
从上例最后一行可以得知,当指定主键不存在时就会返回 nil。
这里是以字符串为主键,当然不使用字符串也可以。作为主键还可以使用整数等其它数据类型,在有很多编号单元的情况下使用哈希表会比使用数组更加方便。
另外,哈希表的反操作,也就是「检查与数值对应的主键」的情况下,在 [] 中写入数值是不能得到其主键的。这里不再多作陈述,该种操作方法我们会在后面特别介绍。
Hash 表数值的添加
实际操作中,Hash 表可以在程序中直接指定数据建立, 亦可以使用先建立一个空的 Hash 表然后向其中添加单元数据等多种方法生成。 生成一个空的 Hash 表只需写入 {} 就行了。
a = {}
向 Hash 表中添加数值,和数组单元的重赋值完全相同。
a = {}
a["艾力克斯"] = 2000
p a # => {"艾力克斯"=>2000}
Hash 表的操作
Hash 表是 Hash 类的对象。 同数组一样,可以调用这个类定义的方法对数据进行操作。
比如要从 Hash 表中删除数值的话,就要使用 delete 方法。
a = {"艾力克斯"=>2000, "杰克"=>2003}
a.delete("杰克")
p a # => {"艾力克斯"=>2000}
想知道 Hash 表中是否含有某个特定主键的情况下,就要使用 include? 方法。
a = {"艾力克斯"=>2000, "杰克"=>2003}
p a.include?("艾力克斯") # => true
p a.include?("宇佐助") # => false
第三行中使用 include? 方法,是确认哈希表中是否含有主键 "艾力克斯"。上例在第一行生成哈希表时主键设定有 "艾力克斯",所以输出结果为 true(真)。同样第四行是确认哈希表中是否含有主键 "宇佐助"。然而这个主键在哈希表中是不存在的,所以输出结果就为 false(伪)。
Hash 表的循环
在 Hash 类中,有取得全部主键排列的 keys 方法。
a = {3=>6, 4=>10, 5=>15}
p a.keys # => [5, 3, 4]
这样,=> 左侧的主键会全部排列出来。 但 Hash 表中是没有顺序的,所以排列会无顺序可言。
前节中,我们学习了使用 for 循环指定数组的方法。 现在让我们来用 for 循环指定 keys 方法的返回值,作成 Hash 表主键的循环吧。
a = {3=>6, 4=>10, 5=>15}
for k in a.keys
p k
end
运行上例就会按不同顺序显示 3、4、5。
而且,使用 values 方法的话,还能取得 Hash 表全部数值的排列。
a = {3=>6, 4=>10, 5=>15}
for v in a.values
p v
end
运行上例就会按不同顺序显示 6、10、15。