如何合并单个 array/dictionary 和 return 值中的重复数据?
How to merge duplicate data in a single array/dictionary and return values?
我为 CorelDraw 编写了一个 VBA 宏,它循环遍历选定的对象和 returns 值作为字符串。我希望它能够更好地处理重复数据,例如如果两个对象具有相同的大小,它应该 return
"2 of 10 x 10"
而不是
"1 of 10 x 10"
"1 of 10 x 10"
来自Ruby(特别是哈希值),我认为宏应该遍历选定的范围,添加 (object.sizeWidth, object.sizeHeight) 数据作为字符串到 array/dictionary 应该检查重复项并计算它们的位置。我不知道什么是最好的或如何 set/check 他们的价值观。
到目前为止,这是我的代码
Sub objectsToString()
Dim str As String
Dim v As Shape, vr As ShapeRange
Dim xSize#, ySize#
Dim dupCount As Integer
str = ""
Set vr = ActiveSelectionRange
For Each v In vr
dupCount = 'value assigned via iteration
xSize = v.SizeWidth
ySize = v.SizeHeight
str = str & dupCount & " of " & xSize & " x " & ySize & vbNewLine
Next v
End Sub
例如使用 scripting.dictionary 使用形状名称作为键,并使用它的 .exists 方法然后将项目作为计数并使用具有相同键名的单独字典,然后使用 class/type/array/collection/dictionary 尺寸为.
这样的事情会是一个好的开始。
Sub x()
Dim a() As Variant
Dim d As Scripting.Dictionary
Dim v As Variant
a = Array("10 x 10", "20 x 20", "30 x 30", "10 x 10")
Set d = New Scripting.Dictionary
For Each v In a
If Not d.Exists(v) Then
d.Add v, 1
Else
d(v) = d(v) + 1
End If
Next v
For Each v In d.Keys
Debug.Print d(v) & " of " & v
Next v
End Sub
给出结果
2 个,共 10 个 x 10 个
1 个,共 20 个 x 20 个
1 个,共 30 个 x 30 个
我为 CorelDraw 编写了一个 VBA 宏,它循环遍历选定的对象和 returns 值作为字符串。我希望它能够更好地处理重复数据,例如如果两个对象具有相同的大小,它应该 return
"2 of 10 x 10"
而不是
"1 of 10 x 10"
"1 of 10 x 10"
来自Ruby(特别是哈希值),我认为宏应该遍历选定的范围,添加 (object.sizeWidth, object.sizeHeight) 数据作为字符串到 array/dictionary 应该检查重复项并计算它们的位置。我不知道什么是最好的或如何 set/check 他们的价值观。
到目前为止,这是我的代码
Sub objectsToString()
Dim str As String
Dim v As Shape, vr As ShapeRange
Dim xSize#, ySize#
Dim dupCount As Integer
str = ""
Set vr = ActiveSelectionRange
For Each v In vr
dupCount = 'value assigned via iteration
xSize = v.SizeWidth
ySize = v.SizeHeight
str = str & dupCount & " of " & xSize & " x " & ySize & vbNewLine
Next v
End Sub
例如使用 scripting.dictionary 使用形状名称作为键,并使用它的 .exists 方法然后将项目作为计数并使用具有相同键名的单独字典,然后使用 class/type/array/collection/dictionary 尺寸为.
这样的事情会是一个好的开始。
Sub x()
Dim a() As Variant
Dim d As Scripting.Dictionary
Dim v As Variant
a = Array("10 x 10", "20 x 20", "30 x 30", "10 x 10")
Set d = New Scripting.Dictionary
For Each v In a
If Not d.Exists(v) Then
d.Add v, 1
Else
d(v) = d(v) + 1
End If
Next v
For Each v In d.Keys
Debug.Print d(v) & " of " & v
Next v
End Sub
给出结果
2 个,共 10 个 x 10 个
1 个,共 20 个 x 20 个
1 个,共 30 个 x 30 个