假设:
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
如果哈希表(地图)不是我想要做的,那会是什么?数据库是不可能的。如果用户需要填写与前两个相同的详细信息,用户应该能够继续使用另一个{}
添加到最后。
答案 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
中的哈希,而是一个数组(包含两个哈希元素):)
将结果与以下内容进行比较,并注意每次b
为nil
:
["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"