假设数据结构如下所示:
foo = {
'first': {
'bar': 'foo'
},
'second': {
'bar': 'foobar',
'foo': 'barfoo'
},
'third': {
'test': 'example'
}
}
我想从哈希foo
中删除所有包含只有一个键/值对的条目的键。在这种情况下,操作完成后,foo
只应该离开:
foo = {
'second': {
'bar': 'foobar',
'foo': 'barfoo'
}
}
由于foo['first']
和foo['third']
仅包含一对密钥/值对。
答案 0 :(得分:4)
delete_if
foo.delete_if { |_, inner| inner.one? }
delete_if
具有破坏性,因此会改变原始哈希值reject
这不再变异了:
foo = foo.reject { |_, inner| inner.one? }
select
没有突变,加上其他运算符:
foo = foo.select { |_, inner| inner.size > 1 }
many?
-仅导轨foo = foo.select { |_, inner| inner.many? }
#many?
,它是包含多于一项的任何数组_
用于未使用的变量,因为这是显示“这无关紧要”的一种方式inner
-确信存在更好的名称,但value
可能会造成混淆答案 1 :(得分:1)
仅需一对选项,就为检查情况提供了方便。
使用 Hash#keep_if
foo.keep_if{ |_, v| v.size > 1 }
更复杂的 Enumerable#each_with_object :
foo.each_with_object({}){ |(k,v), h| h[k] = v if v.size > 1 }