带有重复键的Ruby Hash?

B S*_*ven 19 ruby hash key

是否可以在Ruby中创建允许重复键的哈希?

我在Ruby 1.9.2工作.

ste*_*lag 40

在哈希中实现重复键的两种方法:

h1 = {}
h1.compare_by_identity
h1["a"] = 1
h1["a"] = 2
p h1 # => {"a"=>1, "a"=>2}


h2 = {}
a1 = [1,2,3]
a2 = [1,2]
h2[a1] = 1
h2[a2] = 2
a2 << 3 
p h2 # => {[1, 2, 3]=>1, [1, 2, 3]=>2}
Run Code Online (Sandbox Code Playgroud)

  • 第一个例子正是我所寻找的.真棒. (2认同)
  • 奇怪......它在2.3.3上不起作用,但它确实适用于2.4.2? (2认同)

Mic*_*ohl 30

这有点打败哈希的目的,不是吗?

如果希望键指向多个元素,请将其指向数组:

h = Hash.new { |h,k| h[k] = [] }
h[:foo] << :bar
h #=> {:foo=>[:bar]}
h[:foo] << :baz
h #=> {:foo=>[:bar, :baz]}
Run Code Online (Sandbox Code Playgroud)

  • 情况可能就是如此,但这并没有把它变成一个关联数组(这就是Ruby哈希的结果)."在计算机科学中,关联数组,映射,符号表或字典是由(键,值)对的集合组成的抽象数据类型,这样**每个可能的键在集合中只出现一次.**"强调补充说. (2认同)
  • C++ 具有多重映射和多重集,允许多个键具有相同的名称。来自关联数组的同一维基百科页面:“多重映射通过允许多个值与单个键关联来概括关联数组。” 所以我不会说它违背了目的......但它只是一个不同的、有效的用例。 (2认同)