2017-04-26 54 views
0

我有一個哈希另一個問題:如何從哈希追加值使用Ruby

{:userdata=>["field: email,start: 0,end: 0"]} 

,我想添加到另一個哈希看起來像這樣:

{:userdata=>["field: resource.attributes.account_source.iban,start: 0,end: 0", "field: resource.attributes.account_source.person_name,start: 0,end: 0", "field: resource.attributes.account_target.iban,start: 0,end: 0", "field: resource.attributes.account_target.person_name,start: 0,end: 0"], :iddata=>["field: resource.attributes.account_source.account_id,start: 0,end: 0", "field: resource.attributes.account_source.person_id,start: 0,end: 0", "field: resource.attributes.account_target.account_id,start: 0,end: 0", "field: resource.attributes.account_target.person_id,start: 0,end: 0"], :infodata=>["field: resource.attributes.reason,start: 0,end: 0"], :balancedata=>["field: resource.attributes.amount,start: 0,end: 0"]} 

有多種鍵在第二個哈希值和數組數組中,所以我需要將該值添加到正確的位置,這應該類似於:

{:userdata=>["field: resource.attributes.account_source.iban,start: 0,end: 0", "field: resource.attributes.account_source.person_name,start: 0,end: 0", "field: resource.attributes.account_target.iban,start: 0,end: 0", "field: resource.attributes.account_target.person_name,start: 0,end: 0", "field: email,start: 0,end: 0"], .... 

第二個散列更復雜,它可能包含我嘗試「合併」的散列相同的鍵,但當然缺少值,這是我想在第二個散列中添加的值。

+0

在Ruby中,我們稱它們爲散列。請閱讀「[問]」和「[mcve]」及其鏈接頁面。我們希望看到您嘗試解決這個問題。沒有它,看起來你希望我們爲你寫代碼,這不是它的目的。正如你所寫的,你的問題太廣泛了。 –

+0

我知道這是一個哈希,你指的是標題上的錯誤?我可以改變它,我沒有寫這個問題,因爲我想要代碼,我寫了,因爲我不知道如何解決我的問題,這是不同的。 – ennon

+0

我想感謝您發送給我的鏈接,這很有幫助,因爲我驗證了我寫的信息可以幫助人們識別問題,因爲我解釋說使用2個哈希映射,在這種情況下無法合併它們,因爲輸出仍然是第二個哈希。事實上,我說過,當我嘗試合併時,它仍然缺少價值。它也是**可驗證的**,因爲我描述了這個問題,**消除了與問題**無關的任何問題,事實上,我沒有提到我在創建正確的字符串時遇到的其他問題陣列。 – ennon

回答

0

可以使用Hash#merge與塊,並用Array#|得到兩個數組的聯合:

h1 = { userdata: ['field: email,start: 0,end: 0'] } 
h2 = { userdata: ['field: resource.attributes.account_source.iban,start: 0,end: 0', 'field: resource.attributes.account_source.person_name,start: 0,end: 0', 'field: resource.attributes.account_target.iban,start: 0,end: 0', 'field: resource.attributes.account_target.person_name,start: 0,end: 0'], iddata: ['field: resource.attributes.account_source.account_id,start: 0,end: 0', 'field: resource.attributes.account_source.person_id,start: 0,end: 0', 'field: resource.attributes.account_target.account_id,start: 0,end: 0', 'field: resource.attributes.account_target.person_id,start: 0,end: 0'], infodata: ['field: resource.attributes.reason,start: 0,end: 0'], balancedata: ['field: resource.attributes.amount,start: 0,end: 0'] } 

h3 = h1.merge(h2) { |_, old_array, new_array| new_array | old_array | } 
# {:userdata=>["field: resource.attributes.account_source.iban,start: 0,end: 0", "field: resource.attributes.account_source.person_name,start: 0,end: 0", "field: resource.attributes.account_target.iban,start: 0,end: 0", "field: resource.attributes.account_target.person_name,start: 0,end: 0", "field: email,start: 0,end: 0"], :iddata=>["field: resource.attributes.account_source.account_id,start: 0,end: 0", "field: resource.attributes.account_source.person_id,start: 0,end: 0", "field: resource.attributes.account_target.account_id,start: 0,end: 0", "field: resource.attributes.account_target.person_id,start: 0,end: 0"], :infodata=>["field: resource.attributes.reason,start: 0,end: 0"], :balancedata=>["field: resource.attributes.amount,start: 0,end: 0"]} 

注意:userdata'userdata'是不一樣的Ruby對象,並且不被認爲是同一個哈希鍵。

最後,你的散列值不是散列,而是字符串數組。如果你想要一個散列的功能,使用Hash

['field: a'] | ['field: a, value: 1'] 
# ["field: a", "field: a, value: 1"] 

:與同場的兩個字符串,但是不同的值將被視爲完全不同。

+0

非常感謝!所以它基本上是加入兩個數組的數組方法......哇! – ennon