哈希映射在红宝石中

时间:2012-10-27 23:10:44

标签: ruby hash hashmap hashtable

假设:

hash = { "value" => 4, "details" => "I am some details"}, {"value" => 5, "details" => "I am new details"}

我可以这样做:

hash.each do |key, value|
   puts "#{key} is #{value}"
end

得到类似的东西:

{ "value" => 4, "details" => "I am some details"} is {"value" => 5, "details" => "I am new details"} is

如果哈希表(地图)不是我想要做的,那会是什么?数据库是不可能的。如果用户需要填写与前两个相同的详细信息,用户应该能够继续使用另一个{}添加到最后。

3 个答案:

答案 0 :(得分:2)

您已经创建了一个哈希数组,您可以更明确地执行以下操作:

hashes = [{:value => "foo"}, {:value => "bar"}]

然后您可以附加

hashes << {:value => "baz"}

如果您想知道您正在使用哪种类型的变量,可以执行var.class

hash = { "value" => 4, "details" => "I am some details"}, {"value" => 5, "details" => "I am new details"}
hash.class #=> Array

答案 1 :(得分:1)

Map区别键到值的映射;有Map variants 可以放松一下,但Ruby的Hashmap遵循标准的Map ADT。

在这种情况下,正在创建一个包含两个不同哈希值的数组(每个哈希值都带有“值”和“详细信息”)。

>  x = [1,2] # standard Array literal
   => [1,2]   
>  x = 1,2   # as in the posted code, no []'s, but ..
   => [1,2]  # .. the same: the =, production created the Array here!

所以它不是hash中的哈希,而是一个数组(包含两个哈希元素):)

将结果与以下内容进行比较,并注意每次bnil

["one","two","three","four"].each do |a,b|
    puts ">" + a + "|" + b
end

这就是为什么它打印“hash1.to_str hash2.to_str ”,因为each遍历数组,如上所述,只有第一个参数填充了一个有意义的值 - 一个哈希值。

答案 2 :(得分:0)

我不明白“数据库是不可能的”在这种情况下意味着什么。听起来你正在创建一个数据存储,到目前为止看起来你有一个带有相关值的数字ID。

哈希是哈希;你要为哈希值添加值:

h = { "4" => "foo" } # Initial values
h["5"] = "ohai"
h["6"] = "kthxbai"
相关问题