あなたがarrayHash
を変異したい場合は、次の操作を行うことができます:
arrayHash.each { |h| h.each { |k,v| h[k] = v.is_a?(String) ? v[/\A\S*/] : v } }
#=> [{:firstname=>"Anne", :lastname=>"Hook", :email=>"[email protected]", :id=>1},
# {:firstname=>"Michael", :lastname=>"Rodriguez", :email=>"[email protected]", :id=>2}]
arrayHash
が変異している:
arrayHash
#=> [{:firstname=>"Anne", :lastname=>"Hook", :email=>"[email protected]", :id=>1},
# {:firstname=>"Michael", :lastname=>"Rodriguez", :email=>"[email protected]", :id=>2}]
ゼロに続く文字列の先頭にマッチし/\A\S*/
正規表現または空白以外の文字以上。文字列v
の場合、v[/\A\S*/]
は一致を返します。 (方法String#[]を参照してください)。
あなたがarrayHash
を変異させたくない場合は、これは一つの方法である:
arrayHash.map { |h| h.merge(h) { |_,v,_| v.is_a?(String) ? v[/\A\S*/] : v } }
#=> [{:firstname=>"Anne", :lastname=>"Hook", :email=>"[email protected]", :id=>1},
# {:firstname=>"Michael", :lastname=>"Rodriguez", :email=>"[email protected]", :id=>2}]
arrayHash
は変更されません:私は、メソッドの形式を使用していた第2のケースで
arrayHash
#=> [{:firstname=>"Anne Marie", :lastname=>"Hook", :email=>"[email protected]", :id=>1},
# {:firstname=>"Michael", :lastname=>"Rodriguez", :email=>"[email protected]", :id=>2}]
Hash#mergeブロックを使用して両方のハッシュに存在するキーの値をマージします。これはすべてのキーです。 3つのブロック変数の値の説明については、docを参照してください(最初と3番目はブロック計算で使用されていないことを示すためにアンダースコアで表されています)。
リンク先ページを含めて[ask]をお読みください。私たちはあなたが試したことを知りたいです。私たちがあなたのコードを修正する方が良いのは、あなたのためにコードを書くことです。これはSOのためではありません。 "[どのくらいの研究努力がStack Overflowユーザーに期待されていますか?](http://meta.stackoverflow.com/a/261593/128421)"も良い読書です。 –
なぜ答えを選ぶのが急いでいるのですか?もっと来るかもしれない、あなたが知っている。 –