什么是Ruby哈希?

Baklib
Baklib 最后一次编辑 4 年多前
703
散列是一种用于以UNIQUE键值对形式存储数据的数据结构。与数组不同,没有数字索引,您可以使用键访问哈希值。
示例包括:
  1. 国家名称及其对应国家代码的列表(例如ES =>西班牙)
  2. 字典,其中每个单词都有可能的定义的列表
  3. 域名及其IP地址
当您拥有(或可以转换为)这种类似于字典的格式的数据时,哈希可以加快代码的速度。
好。
我们大致了解什么是哈希,但是如何创建哈希呢?
像这样:
  1. { }
那是一个空的哈希!
具有三个键/值对的哈希看起来像这样:
  1. { a:1 ,b:2 ,c:3 }
其中a是键,并且1是该键的对应值。请注意,键值对以逗号分隔。
获取我的终极Ruby秘籍表: 这个方便的7页PDF帮助您快速找到所需的Ruby语法,正在寻找的Ruby方法或您不太记得其名称的内置类。
现在:
让我们看看如何在Ruby项目中使用常见的哈希方法使用哈希。

将值存储在Ruby哈希中

正如我们已经看到的,您可以使用一组初始值创建哈希。
这是另一个例子:
  1. 水果= { 椰子:1 ,苹果:2 ,香蕉:3 }
另一种选择是将新值添加到现有哈希中。
像这样:
  1. 水果[ :orange ] = 4
这是:orange作为哈希键4及其对应的值。
为什么:orange在访问值时在单词前冒号,而orange:在创建哈希时在单词后冒号?这是一种更好的语法,它允许您创建没有哈希=>符号()的哈希,这是一种有效的旧方法。
值可以是任何Ruby对象。
包括:
  1. 弦乐
  2. 整数和浮点数
  3. 数组
键也可以是任何东西,但是符号(例如:banana)和字符串是您会发现的最常见的键类型。
请记住...
密钥是唯一的,我们只能有一个:orange或一个:apple密钥。
当您两次添加同一密钥时,将更改其值。

如何从哈希访问值

您通过密钥访问哈希。
如果您需要直接访问这些值,则哈希可能不是您数据的正确结构。
范例:
  1. 水果[ :orange ]
  2. #4
这是散列的全部要点,可通过其键快速查找项目。
如果键不存在,您将得到nil
  1. 水果[ :桃子]
  2. #无
或者,您可以使用fetch方法,该方法允许您提供默认值。
范例:
  1. 水果。提取(:peach ,0 )
如果不使用fetch默认值(第二个参数),则Ruby将引发KeyError异常。
这很有用,因为您会知道缺少什么密钥。

如何合并两个Ruby哈希

您可以采用两个哈希并将它们合并到一个新的哈希中。
这是什么方法?
好吧,不难猜测这一点。该方法的名称是merge
使用方法如下:
  1. 默认值= { a:1 ,b:2 ,c:3 }
  2. 偏好= { c:4 }
  3. 默认值。合并!(首选项)
  4. #{:a => 1,:b => 2,:c => 4}
请注意,由于键是唯一的,因此新值将覆盖旧值。
您可以将这一事实用于有趣的解决方案,例如创建“默认”哈希,用户可以通过传递自己的哈希来覆盖它。
如果您需要对键的合并方式进行更多控制,则可以传递一个块。
像这样:
  1. 默认值。合并!(首选项){ |键,旧,新| [ 旧,新] 。最大}
哪里old是从哪里来的值defaults,并且new是该值来自何处preferences

一键有多个值

在字典中...
单词是唯一的,但它们可以具有与之关联的多个值(定义)。
您可以在Ruby中做到这一点!
范例:
  1. 字典= {
  2. 机会:[
  3. “在某种情况下可以做某事” ,
  4. “有利于达成目标的情况或条件”
  5. ] ,
  6. 创造力:[
  7. “利用想象力或原创思想创造新事物” ,
  8. “创造能力” ,
  9. “以新方式结合现有观念而产生新观念的过程”
  10. ]
  11. }
  12. 字典[ :creativity ] [ 1 ]
Where dictionary[:creativity]给您一个数组,[1]并给您该数组中的第二个元素。
换句话说:
键是一个符号,值是数组。当您访问哈希时,您将获得一个通常可以访问的数组,就像其他数组一样。

如何对哈希进行排序

您可以对数组进行排序。但是您知道您也可以对散列进行排序吗?
当你sort的哈希,它是由键排序。
范例:
  1. { b:1 ,a:2 } 。分类
  2. #[[:: a,2],[:b,1]]
但是您也可以按值对它们进行排序:
  1. { c:3 ,b:1 ,a:2 } 。sort_by (&:last )
您会注意到,对哈希进行排序得到的不是另一个哈希…
这是一个数组!
但是您可以使用to_h方法将该数组转换回哈希。

从哈希中获取所有键和值

如果您需要所有按键的列表,这是个好消息,那么有一种方法!
这里是:
  1. { 苹果:1 ,香蕉:2 } 。键
  2. #[:apple,:banana]
还有一种求值的方法:
  1. { 苹果:1 ,香蕉:2 } 。价值观
  2. #[1,2]
如果您想知道哈希中是否存在键,请使用key?方法。