【发布时间】:2021-11-03 00:10:18
【问题描述】:
我知道哈希不会存储重复的键。但我想知道是否可以根据要求更改默认行为,这可能吗? 我这里给出示例代码
keys_array = [ 'key1', 'key2' ]
values_array = [
{"A": { "id": "1" }},
{"B": { "id": "2" }}
]
results = keys_array.zip(values_array ).to_h
这里的输出正是我想要的
{"key1"=>{:A=>{:id=>"1"}}, "key2"=>{:B=>{:id=>"2"}}}
但是如果键重复,例如
keys_array = [ 'key1', 'key1' ] in which 'key1' key is repeated,
result will be {"key1"=>{:B=>{:id=>"2"}}}
但我想要
{"key1"=>{:A=>{:id=>"1"}}, "key1"=>{:B=>{:id=>"2"}}}
我知道分组和所有,但它会改变结果格式
所以我不想用那个
我想要这个结果 {"key1"=>{:A=>{:id=>"1"}}, "key1"=>{:B=>{:id=>"2"}}} 其中 key1 是一个重复的键。
另请注意,这些数组值不是固定的,它是动态的
非常感谢您的帮助!
【问题讨论】:
-
哈希键,根据定义,是唯一的。 Ruby 是一种相当动态的语言,所以我不排除有一种方法可以做你想做的事,但你可能想考虑一种方法来实现你的目标,而无需尝试改变这种基本行为。
-
正如你已经写的那样哈希不存储重复的键。无法更改此行为。
-
问题:假设有可能,如果有两个元素具有完全相同的键,您将如何通过键访问散列的元素?哪一个会优先?或者您想以“循环顺序”接收它们?只需使用数组来存储具有相同键的元素与具有不同索引的元素即可。问题没有多大意义。
-
这听起来更像是你想要一个字符串散列到一个对象数组。最终,多个相同的密钥毫无意义(即使您做了一些危险的事情以使其看起来相同),因为除非您拥有原始数据来重建危险的密钥,否则您将无法再次访问它们,这意味着您不需要哈希。
标签: arrays ruby-on-rails ruby hash