【发布时间】:2019-09-20 08:56:21
【问题描述】:
我有一个哈希值,它是一个数组。如何以最高效的方式删除数组中的重复元素和相应的 id?
这是我的哈希示例
hash = {
"id" => "sjfdkjfd",
"name" => "Field Name",
"type" => "field",
"options" => ["Language", "Question", "Question", "Answer", "Answer"],
"option_ids" => ["12345", "23456", "34567", "45678", "56789"]
}
我的想法是这样的
hash["options"].each_with_index { |value, index |
h = {}
if h.key?(value)
delete(value)
delete hash["option_ids"].delete_at(index)
else
h[value] = index
end
}
结果应该是
hash = {
"id" => "sjfdkjfd",
"name" => "Field Name",
"type" => "field",
"options" => ["Language", "Question", "Answer"],
"option_ids" => ["12345", "23456", "45678"]
}
我知道我必须考虑到,当我删除 options 和 option_ids 的值时,这些值的索引会发生变化。但不知道该怎么做
【问题讨论】:
-
{"Language" => "12345", "Question" => "23456", "Answer" => "45678"}是否有理由不受欢迎? -
是的,这会更有意义,但这是给我的问题。
-
“重复元素”是什么意思?
2(以及1)是[1,2,2,3,1]中的重复元素吗? -
C.,从技术上讲,在回答 @engineersmnky 的问题时,我认为您实际上的意思是“不”(没有理由)。 :-) 你说,“结果应该是...
hash = {...”。这有点令人困惑。如果你写了hash #=> {...,那意味着你想修改现有的哈希hash。如果您只写了{...,则意味着(除非您另有说明)您希望创建一个新的散列并保持现有散列不变。提问时,一般规则是不修改输入对象(也称为 mutated),除非提问者明确声明要修改它们。 -
@CarySwoveland 是的,
duplicated会是更好的措辞 :) 感谢您的 cmets 和帮助!