1

Hash からrelationsいくつかのエントリを削除し、削除したエントリを別の Hash に保持したいと考えていますobj

私が見つけHash.delete_ifてやった:

obj = relations.delete_if{|k,v| v[:value] == 1}

ただし、削除されたものを返す代わりに、削除されていないものを返します。

それを行う方法はありますか?

4

3 に答える 3

2

これを試して:

another_hash = {}
relations.delete_if{|k,v| v == 1 ? another_hash[k] = v; true : false}
于 2012-12-13T15:56:57.087 に答える
0

これを行う組み込みメソッドは知りませんが、自分でメソッドを構築するのは簡単です。

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クラスを開いてそこにメソッドを配置することもできます。

于 2012-12-13T14:46:38.533 に答える