在The previous question中,我们总结了yermonth等于的所有项目......但是现在我想要将两个参数(yearmonth和prev value)(10,12,10)相等的所有项目相加。 换句话说,只将Sting1和String2加在一起。
我使用if v(0) = v(1) then
作为新参数限制,但它不起作用。
string1 = "10,201402,10|10,201403,15|10,201404,25|10,201405,11|10,201406,23"
string2 = "10,201401,17|10,201402,25|10,201403,15|10,201404,12|10,201405,13|10,201406,9"
string3 = "12,201405,17|12,201406,25|12,201407,15|12,201408,12|12,201409,13|12,201410,9|12,201411,9|12,201412,9|12,201501,9"
Set d = CreateObject("Scripting.Dictionary")
Sub Add(s)
For Each line In Split(s, "|")
v = Split(line, ",")
if v(0) = v(1) then
d(v(1)) = d(v(1)) + CInt(v(2))
end if
Next
End Sub
Add string1
Add string2
Add string3
Set a = CreateObject("System.Collections.ArrayList")
For Each key In d.Keys
a.Add d(key) & "," & key & "," & d(key)
Next
a.Sort
result = Join(a.ToArray, "|")
WScript.Echo result
实际结果:
,10,|,12,|10,201402,10|11,201405,11|12,201408,12|13,201409,13|15,201403,15|15,201407,15|17,201401,17|23,201406,23|25,201404,25|9,201410,9|9,201411,9|9,201412,9|9,201501,9
期望的结果:
10,201401,17|10,201402,35|10,201403,30|10,201404,37|10,201405,24|10,201406,32
答案 0 :(得分:1)
如果您确实使用了条件v(0) = v(1)
,我会严重怀疑您是否有任何结果,因为根据您的示例数据,这些值永远不会相等。
如果要对按两个参数分组的值求和,则需要从这两个参数构建字典键:
For Each line In Split(s, "|")
v = Split(line, ",")
key = v(0) & "," & v(1)
d(key) = d(key) + CInt(v(2))
Next
v = Split(line, ",")
将记录10,201402,10
拆分为包含3个值10
,201402
和10
的数组。
key = v(0) & "," & v(1)
从该数组的前2个元素构建键10,2014
。
d(key) = d(key) + CInt(v(2))
将第三个值转换为整数,并将其添加到与键10,2014
关联的当前值。