簡體   English   中英

如何使用Ruby將哈希值附加到另一個值

[英]How to append values from an hash to another one using 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"], ....

第二個哈希值比較復雜,可能包含與我嘗試“合並”的哈希值相同的鍵,但是當然缺少該值,這就是我要在第二個哈希值中添加的值。

您可以將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對象,並且在哈希中不被視為相同的鍵。

最后,哈希中的值不是哈希,而是字符串數組。 具有相同字段但值不同的兩個字符串將被認為是完全不同的:

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

如果您需要哈希的功能,請使用Hash

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM