2

我想将一些散列对象保存到一个集合中(在 Java 世界中,将其视为一个列表)。我在网上搜索了一下Ruby中是否有类似的数据结构,没有找到。目前我一直在尝试将 hash 保存a[]到 hashb[]中,但是在尝试从 hash 中获取数据时遇到了问题b[]

Ruby 上有没有内置的集合数据结构?如果不是,是否在另一种散列常见做法中保存散列?

4

5 回答 5

3

如果它正在访问有问题的哈希中的哈希,请尝试:

>> p = {:name => "Jonas", :pos => {:x=>100.23, :y=>40.04}}
=> {:pos=>{:y=>40.04, :x=>100.23}, :name=>"Jonas"}
>> p[:pos][:x]
=> 100.23
于 2009-06-15T19:05:43.330 回答
2

那应该没有什么问题。

a = {:color => 'red', :thickness => 'not very'}
b = {:data => a, :reason => 'NA'}

也许你可以解释你遇到了什么问题。

于 2009-06-15T19:03:09.153 回答
2

这个问题并不完全清楚,但我认为你想要一个哈希列表(数组),对吧?

在这种情况下,您可以将它们放在一个数组中,这就像 Java 中的列表:

a = {:a => 1, :b => 2}
b = {:c => 3, :d => 4}
list = [a, b]

您可以检索这些哈希值,如 list[0] 和 list[1]

于 2009-06-15T19:10:09.607 回答
1

Ruby 中的列表是数组。您可以使用Hash.to_a

如果您尝试将哈希 a 与哈希 b 组合,您可以使用Hash.merge

编辑:如果您尝试将哈希 a 插入哈希 b,您可以这样做

b["Hash a"] = a;
于 2009-06-15T19:01:37.907 回答
1

到目前为止,这里的所有答案都是关于 Hash in Hash,而不是 Hash plus Hash,所以为了完整起见,我会附和这个:

# Define two independent Hash objects
hash_a = { :a => 'apple', :b => 'bear', :c => 'camel' }
hash_b = { :c => 'car', :d => 'dolphin' }

# Combine two hashes with the Hash#merge method
hash_c = hash_a.merge(hash_b)

# The combined hash has all the keys from both sets
puts hash_c[:a] # => 'apple'
puts hash_c[:c] # => 'car', not 'camel' since B overwrites A

请注意,当您将 B 合并到 A 时,A 在 B 中的任何键都将被覆盖。

于 2009-06-15T21:02:25.387 回答