7

私は今、ハッシュリストのネストされたハッシュキーを削除するために数時間試みています。次のような多くのソリューションのネストされていないハッシュを見ました。

   sample_hash = {"key1" => "value1", "key2" => "value2"}
   sample_hash.except("key1") 

これにより、次の結果が得られます。

  {"key2"=>"value2"}

しかし、ネストされたキーを持つハッシュで except メソッドを使用しようとすると、機能しません。ここに私のコード:

  nested_hash = {"key1"=>"value1", "key2"=>{
                                           "nested_key1"=>"nestedvalue1",
                                           "nested_key2"=>"nestedvalue2"
                                           }
                }

  nested_hash.except("nested_key2")

except() メソッドは、何も変更せずに nested_hash を返します。ネストされたハッシュキーを except メソッドに渡す方法を探しましたが、何も見つかりませんでした。ネストされたキーをこのメソッドに渡すことは可能ですか、それともハッシュ リストからネストされたハッシュ キーを削除する他の方法を使用する必要がありますか?

4

3 に答える 3

10

どうですか

Hash[nested_hash.map {|k,v| [k,(v.respond_to?(:except)?v.except("nested_key2"):v)] }]

=> {"key1"=>"value1", "key2"=>{"nested_key1"=>"nestedvalue1"}}

うーん。

于 2013-05-28T17:54:15.653 に答える