2016-09-13 92 views
2

我有一個包含空格的哈希值的散列數組。我想通過散列中的每個數組元素和每個值來刪除空間中的任何空格和以下字符。我的數據的一個例子是刪除數組中的第一個空白後的所有內容

arrayHash = [{:firstname=>'Anne Marie', :lastname=>'Hook', :email=>'[email protected]', :id=>1}, 
      {:firstname=>'Michael', :lastname=>'Rodriguez', :email=>'[email protected]', :id=>2}] 

因此,例如,在姓名的關鍵,我想借此「安妮瑪麗」,減少它只是「安妮」,做同樣的每個元素在該數組中。

+0

請閱讀「[問]」,包括鏈接的頁面。我們想知道你的嘗試。對於我們來說,糾正你的代碼比爲你寫代碼更好,這不是它的目的。 「[Stack Overflow用戶需要多少研究工作?](http://meta.stackoverflow.com/a/261593/128421)」也是一個很好的解讀。 –

+0

爲什麼急於選擇答案?你知道更多可能會來臨。 –

回答

3
arrayHash.map! do |hash| 
    hash.each_with_object({}) do |(k, v), h| 
    h[k] = v.is_a?(String) ? v.split(' ').first : v 
    end 
end 
#=>[{:firstname=>"Anne", :lastname=>"Hook", :email=>"[email protected]", :id=>1}, {:firstname=>"Michael", :lastname=>"Rodriguez", :email=>"[email protected]", :id=>2}] 
+0

不幸的是,這不起作用,因爲這是一個散列數組而不是直接散列。這不會訪問數組元素中的散列。 –

+0

@coyote_rey我不明白你的意見。運行代碼並看看它是否返回您在OP –

+0

中描述的內容我已經運行了此代碼,但沒有看到它影響到名字值。我看到它只是在該行的輸出中表示安妮,但在事實之後顯示arrayHash [0]後,我仍然看到'Anne Marie' –

3

如果你想變異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*/後跟零字符串的開頭匹配正則表達式或者除了空白以外的其他字符。對於字符串vv[/\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形式它使用一個塊來確定兩個散列中正在合併的鍵的值,這裏是所有鍵。請參閱文檔以獲取三個塊變量值的解釋(第一個和第三個塊用變量表示,用下劃線表示它們不用於塊計算)。

相關問題