如果你想變異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)」也是一個很好的解讀。 –
爲什麼急於選擇答案?你知道更多可能會來臨。 –