本人做一个excel的macro,
其中有两列,
name value
1000aaa 2
1111aaa 3
1000aaa 4
1000aaa 2
1111aaa 3
1000aaa 4
1000aaa 2
1111aaa 3
1000aaa 4
不如可以抽象成这样,
其中name这一列可能有重复,如果有重复的话将所有name相同的value都放到第一个name中,其余的列删除。
当然这个name可能很大。
1.最简单的方法就是2层循环,n*n是无法接受的。
2.我想就是有哈希的方式实现,
请问vb中是否有c#里面的那种哈希的方式,key和value的,
只要一次遍历就可以把相同name的值求和,基本就是n的时间复杂度。本人vb十分的小白,求高人给一个这样的结构。
用的是excel2003的macro
其中有两列,
name value
1000aaa 2
1111aaa 3
1000aaa 4
1000aaa 2
1111aaa 3
1000aaa 4
1000aaa 2
1111aaa 3
1000aaa 4
不如可以抽象成这样,
其中name这一列可能有重复,如果有重复的话将所有name相同的value都放到第一个name中,其余的列删除。
当然这个name可能很大。
1.最简单的方法就是2层循环,n*n是无法接受的。
2.我想就是有哈希的方式实现,
请问vb中是否有c#里面的那种哈希的方式,key和value的,
只要一次遍历就可以把相同name的值求和,基本就是n的时间复杂度。本人vb十分的小白,求高人给一个这样的结构。
用的是excel2003的macro
Option ExplicitPrivate Sub Command1_Click()
Dim d, s, k
Dim ki() As String, i As IntegerSet d = CreateObject("Scripting.Dictionary")
s = Array( _
"1000aaa 2", _
"1111aaa 3", _
"1000aaa 4", _
"1000aaa 2", _
"1111aaa 3", _
"1000aaa 4", _
"1000aaa 2", _
"1111aaa 3", _
"1000aaa 4")For i = 0 To UBound(s)
ki = Split(s(i))
If d.Exists(ki(0)) Then
d.Item(ki(0)) = Val(d.Item(ki(0))) + Val(ki(1))
Else
d.Add ki(0), ki(1)
End If
Next'============================
For Each k In d
Debug.Print k,
Debug.Print d.Item(k)
NextEnd Sub