如果你想变异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
是不变的:
arrayHash
#=> [{:firstname=>"Anne Marie", :lastname=>"Hook", :email=>"[email protected]", :id=>1},
# {:firstname=>"Michael", :lastname=>"Rodriguez", :email=>"[email protected]", :id=>2}]
在第二种情况下,我使用的方法Hash#merge形式它使用一个块来确定两个散列中正在合并的键的值,这里是所有键。请参阅文档以获取三个块变量值的解释(第一个和第三个块用变量表示,用下划线表示它们不用于块计算)。
请阅读“[问]”,包括链接的页面。我们想知道你的尝试。对于我们来说,纠正你的代码比为你写代码更好,这不是它的目的。 “[Stack Overflow用户需要多少研究工作?](http://meta.stackoverflow.com/a/261593/128421)”也是一个很好的解读。 –
为什么急于选择答案?你知道更多可能会来临。 –