考慮變量:同時讀取多個哈希和紅寶石
ctr = ['cobol',nil,nil,'test',nil,'cobol', nil]
h1 = {
0=>{"ABC"=>"10000100126N", "CDE"=>"2013-08-30-}", "TPP"=>"11400000206633458812N", "APD"=> "01531915972", "PRODUCTID"=>"113n", "OPP"=>"201509n", "CTC"=>"C"},
1=>{"ABC"=>"00000039540A", "CDE"=>"0182.22X", "TPP"=>"1234.565N", "APD"=>"12345600", "PRODUCTID"=>"ACHN", "OPP"=>"00000000000119964.1256", "CTC"=>"00000000000211920"}
}
h2 = {'{' => '+0', 'A' => '+1', 'B' => '+2', '}' => '-0', 'N' => '-5'}
的任務是讀取ctr
數據以及其中值是cobol
,我們需要申請邏輯在這些值僅限h1散列。
我們需要解析散列h1
,如果散列值中的最後一個字符與散列h2
中的某個鍵匹配,則將該值替換爲相應的值並將符號前綴替換爲字符串。
例如:其中5從屬於並且當我們掃描散列h1
,對於值「10000100126N」,因爲最後一個字符是N和它在h2
存在,則輸出應該是「-100001001265」 - 被前置。 [不是說ctr是'cobol']
但是,如果我們看第二個值「CDE」=>「2013-08-30-}」,因爲對於這個鍵值對,ctr值是不是cobol,凌晨與絃樂無關。
這是我迄今所做的:
h1.each do |k,h|
h.update(h) do |*, v|
# puts v
h2.each do |q,p|
if (v[-1] == q)
v.sub!(v[-1], p[-1])
v.sub!(/(.*?)/, p[0] +'\1')
end
end
v
end
end
此代碼更新字符串按要求,但其在h1
所有值運行,我只需要在運行代碼相應的索引,其中數組ctr
中的值爲'cobol'
你的問題是什麼? – sawa
@sawa - 如果數組'ctr'中的值爲'cobol',那麼需要轉換散列'h1'中對應元素的值(索引明)。 例如,數組ctr中的cobol的索引是[0,5] 0和散列h1中的5個元素是'ABC'和'OPP',散列中的相應值應根據以下邏輯: 如果散列h1中的值的最後一個字符存在於散列h2中,則將其替換爲散列h2中對應的鍵值[最後一個字符],例如:10000100126N應改爲-100001001265 我需要實現上述。 –