【发布时间】:2017-04-11 11:10:18
【问题描述】:
考虑变量:
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 中的一个键匹配,则将该值替换为相应的值并将符号添加到字符串中。
例如:当我们扫描哈希h1时,对于值“10000100126N”,由于最后一个字符是N并且它存在于h2中,那么输出应该是'-100001001265',其中附加了5并且-是前置。 [不是这个的 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 - 如果数组
ctr中的值是'cobol',那么对于哈希h1中相应元素的值(索引方式)需要进行转换。例如,数组 ctr 中 cobol 的索引是 [0,5] 0 和 5 哈希h1中的元素是 'ABC' 和 'OPP',哈希中的相应值应该按照以下逻辑更新:如果最后一个哈希h1中的值的字符存在于哈希h2中,然后将其替换为哈希h2中对应键的值[last char] 例如:10000100126N应更改为-100001001265我需要实现上述。跨度>