0

鉴于:

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

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

4

3 回答 3

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
于 2012-10-27T23:23:34.713 回答
1

MapDistinct Keys 到 Values的映射;有一些 Map变体可以放松这一点,但 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 in hash,而是一个 Array (包含两个 Hash 元素):)

将结果与以下结果进行比较,并注意b每次nil

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

这就是为什么它在迭代数组时打印“hash1.to_str is hash2.to_str iseach,如上所述,并且只有第一个参数填充了一个有意义的值 - 其中一个哈希值。

于 2012-10-27T23:16:43.403 回答
0

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

散列是散列;您将向哈希添加值:

h = { "4" => "foo" } # Initial values
h["5"] = "ohai"
h["6"] = "kthxbai"
于 2012-10-27T23:17:23.980 回答