Hash からrelations
いくつかのエントリを削除し、削除したエントリを別の Hash に保持したいと考えていますobj
。
私が見つけHash.delete_if
てやった:
obj = relations.delete_if{|k,v| v[:value] == 1}
ただし、削除されたものを返す代わりに、削除されていないものを返します。
それを行う方法はありますか?
Hash からrelations
いくつかのエントリを削除し、削除したエントリを別の Hash に保持したいと考えていますobj
。
私が見つけHash.delete_if
てやった:
obj = relations.delete_if{|k,v| v[:value] == 1}
ただし、削除されたものを返す代わりに、削除されていないものを返します。
それを行う方法はありますか?
これを試して:
another_hash = {}
relations.delete_if{|k,v| v == 1 ? another_hash[k] = v; true : false}
これを行う組み込みメソッドは知りませんが、自分でメソッドを構築するのは簡単です。
def delete_and_return relations, &block
[relations.reject(&block), relations.select(&block)]
end
relations = {
a: {value: 1},
b: {value: 2},
c: {value: 1},
}
kept, deleted = delete_and_return(relations) {|k,v| v[:value] == 1}
kept # => {:b=>{:value=>2}}
deleted # => {:a=>{:value=>1}, :c=>{:value=>1}}
Hash
クラスを開いてそこにメソッドを配置することもできます。