有数组吗?
我正在开发一个程序,我需要创建一个信息列表。基于我做过的各种搜索,我现在可能比以往任何时候都更困惑。我不确定最好的方法是什么(脚本字典、数组、集合等)...)但是我想学习如何用阵列来做这件事。这是独家新闻...
我正在开发的程序将创建一系列绘图,并向它们添加各种布局选项卡。首先,我需要根据文件名和与之相关的布局标签来收集绘图信息。
例如:绘图“A”可以有布局选项卡“A”、“B”、“C”。图纸' B '可以有布局选项卡' A1 ',' A2 ',' A3 ',' A4 ',' A5 '等等。
我目前正在从我的程序的listview框中收集信息(请参见随附的DVB)。当您单击“创建项目文件”按钮时,它会在列表视图中的条目间循环。但是我需要收集如下信息:
绘图' A'
布局选项卡' A'
布局选项卡' B'
布局选项卡' C'
绘图' B'
布局选项卡' A1'
布局选项卡' A2'
布局选项卡' A3'
布局选项卡' A4'
布局选项卡' A5'
等等....
那么我需要做数组的数组吗(好像一个简单的数组还不够让我难过)??我希望这有意义。
**** Hidden Message ***** 一种方法是使用集合。您可以创建一个具有名称(图形A)的DwgInfo对象,并创建一个可以存储布局名称的集合。
类似这样:
在名为DwgInfo的类模块中代码0]
然后在代码模块中:
Public Sub Test()
Dim dwg1 As DwgInfo
Dim dwg2 As DwgInfo
Dim colDwg As Collection
Dim i As Integer
Set colDwg = New Collection
Set dwg1 = New DwgInfo
Set dwg2 = New DwgInfo
dwg1.Name = "Drawing A"
dwg1.add ("A")
dwg1.add ("B")
dwg1.add ("C")
dwg2.Name = "Drawing B"
dwg2.add ("A1")
dwg2.add ("A2")
dwg2.add ("A3")
For i = 1 To dwg1.Count
'do your stuff here
Debug.Print dwg1.Item(i)
Next i
For i = 1 To dwg2.Count
'do your stuff here
Debug.Print dwg2.Item(i)
Next i
End Sub
此外,在您的代码模块中,您可以有另一个集合来保存dwgInfo对象,然后迭代该集合来施展您的魔法。
如果使用数组,则必须调整它们的大小以添加元素,这样集合可能会比较慢,但对于动态调整大小的数据,它们更容易使用。
只是我的2美分。 我不确定集合是否是可行的方法,因为1)绘图/布局选项卡的数量会有所不同,2)您如何确定一个项目是否已经在集合中?没有EXISTS函数。那会是一个完全独立的函数吗?
我真的很想弄清楚这个数组的东西。它快把我逼疯了。
感谢您的输入。 Tuoni:
这是CREATE PROJECT FILES按钮后面的代码。
这是它在直接窗口中吐出的内容。
这是基于您在我的第一篇文章中的图像中看到的内容。 如果我正确地理解了您的目标(我可能没有...)David Blackmon发布的代码似乎完全符合您的要求——对于每个绘图,创建一个新的DwgInfo对象并将布局添加到其中,然后将其添加到集合中。如果需要,您可以编写一个在集合中循环的存在属性?
收集是执行此操作的最佳方式吗? 还是数组会更好? 只是好奇。 还有一个问题…
Dim dwg1 As DwgInfo
Dim dwg2 As DwgInfo
提供的代码有2个变暗。我猜,当我遇到更多的图画时,我怎么能在飞行中更“暗淡”
这是一段很长的时间,我已经盯着这段代码看了好几个小时,它变得模糊了,所以如果我问了一些“愚蠢”的问题,请原谅我。
收集是执行此操作的最佳方式吗? 还是数组会更好? 只是好奇。
真的,这取决于你想用它们做什么。 与数组相比,集合有几个优点 - 添加它们很容易,与数组不同,您不必担心它有多满,是否有空间,空间在哪里; 其次,您可以按索引或按键引用集合中的项目,数组您只能使用索引... 从理论上讲,集合比数组慢,但是我怀疑你会注意到。 但是,要记住的一件事是,集合的索引从 1 开始,而不是 0 你应该能够在循环中创建对象,就像这样:(注意,未经测试)
Public Sub Test()
Dim dwg As DwgInfo
Dim colDwg As Collection
Dim i As Integer
Dim j As Integer
Set colDwg = New Collection
For i = 1 To lvTech.ListItems.Count
Set dwg = new DwgInfo
dwg.Name = lvTech.ListItems(i).ListSubItems(3)
For j = 1 To dwg.Count
dwg.add( -insert the code for the layout in here- )
Next j
colDwg.add(dwg)
Next i
End Sub
无论如何,类似的东西。 您需要对此进行一些健全性检查 - 再次,未经测试 您可以调暗一个变量并反复使用它
Public Sub Test()
Dim dwg1 As DwgInfo
Dim dwg2 As DwgInfo
Dim colDwg As Collection
Dim i As Integer
Dim j As Integer
Set colDwg = New Collection
Set dwg1 = New DwgInfo
Set dwg2 = New DwgInfo
'loop thru the possible drawing names here and add them to the colDwg
For i = 1 To 5
Set dwg1 = New DwgInfo
'add another loop here to add each layout to the dwg1 object
dwg1.Name = "Drawing A" + Str(i)
dwg1.add ("A" + Str(i))
dwg1.add ("B" + Str(i))
dwg1.add ("C" + Str(i))
colDwg.add dwg1
Set dwg1 = Nothing
Next i
For i = 1 To 5
Set dwg2 = colDwg.Item(i)
For j = 1 To dwg2.Count
Debug.Print dwg2.Item(j)
Next j
Next i
End Sub
页:
[1]
2