关联数组是这样的数组,它的每个数据元素与一个键相配对,该键用于识别数据元素。由于散列函数用来创建关联数组中的指定元素,并在关联数组中查找指定元素,因此关联数组通常称为散列。
在某种意义上,数组元素与列表类似,而散列元素的存放与几何类似,其元素之间没有相对次序,在Ruby中,
数组与散列之间的两个最本质的区别是:
(1)数组使用数值下标来定位特定的元素,而散列使用字符串值(键)来定位元素;
(2)数组中的元素按下标排序,而散列中的元素则不是。
散列的创建方法有两种:new方法或将一个字面量赋值给一个变量。
注意:Ruby返回的散列顺序与创建散列所用的散列字面量的顺序是不同的。因为散列在内存中的世纪顺序是
不可预知的(至少对用户程序是这样的)
定义:通过将单项数学函数(散列算法)应用到任意数量的数据所得到的固定的大小。假如输入数据中发生更改,则消息
摘要的结果值也要更改。消息摘要也被称为散列。
存储地址=hash(关键码) hash 散列函数
散列查找法(也称杂凑查找法)是通过对记录的关键字进行了某个函数,直接得到记录的存储地址,
不需要进行关键字的反复比较。
基本操作:
访问散列中的单个值元素
可通过将用作下标音乐散列的方式访问散列中的单个值元素,与访问数组一样,使用方括号
来指定这种下标操作。
例如:>>kids_ages["Genny"]
=>42
向散列中添加新值
可通过将新元素的值付给新元素的键引用散列添加新值
例如:>>kids_ages["Aidan"]=10;
=> {"Aidan"=>10,"Darcie" =>27,"John" => 44,"Genny" => 42,"Jake" =>28} [2]
删除散列元素
可用delete方法删除散列元素,delete方法的参数是一个元素键。例如:
>> kids_ages.delete("Genny")
=>42
=>kids_ages
=>{"Aidan"=>10,"Darcie" =>27,"John" => 44,"Jake" =>28} [2]
将散列设置为空散列
可采用两种方法将散列设置为空散列:
(1)把一个空散列字面量赋给散列,例如:
>> hi_temps = {"mon" => 74,"tue" =>78}
=>{"mon" => 74,"tue" =>78}
>> hi_temp = { }
=> { }
(2)对散列使用clear方法,例如:
>> salaries = {"Fred" => 47400,"Mike" =>45250}
=>{"Fred" => 47400,"Mike" =>45250}
>> salaries.clear
=> { } [2]
确定散列中是否具有某一特定建的元素
判定方法 has_key? 用于确定散列中是否具有某一特定建的元素。例如,假设仍采用前文中定义的kids_ages散列,则has_key?的用法如下所示:
>> kids_ages.has_key?("John")
=> true
>> kids_ages.has_key?("Henry")
=> false [2]
提取散列的值到数组中
可分别使用方法keys和values将散列的键和值提取到数组中,如下所示:
>>kids_ages.keys
=> ["Aidan","Darcie","John","Jake"]
>> kids_ages.values
=> [10,27,44,28]