SomeCallMeDave 发表于 2008-5-2 13:35:20

有数组吗?

我正在开发一个程序,我需要创建一个信息列表。基于我做过的各种搜索,我现在可能比以往任何时候都更困惑。我不确定最好的方法是什么(脚本字典、数组、集合等)...)但是我想学习如何用阵列来做这件事。
这是独家新闻...
我正在开发的程序将创建一系列绘图,并向它们添加各种布局选项卡。首先,我需要根据文件名和与之相关的布局标签来收集绘图信息。
例如:绘图“A”可以有布局选项卡“A”、“B”、“C”。图纸' B '可以有布局选项卡' A1 ',' A2 ',' A3 ',' A4 ',' A5 '等等。
我目前正在从我的程序的listview框中收集信息(请参见随附的DVB)。当您单击“创建项目文件”按钮时,它会在列表视图中的条目间循环。但是我需要收集如下信息:
绘图' A'
布局选项卡' A'
布局选项卡' B'
布局选项卡' C'
绘图' B'
布局选项卡' A1'
布局选项卡' A2'
布局选项卡' A3'
布局选项卡' A4'
布局选项卡' A5'
等等....
那么我需要做数组的数组吗(好像一个简单的数组还不够让我难过)??我希望这有意义。

**** Hidden Message *****

Tuoni 发表于 2008-5-2 14:17:07

一种方法是使用集合。您可以创建一个具有名称(图形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美分。

Tuoni 发表于 2008-5-2 14:25:47

我不确定集合是否是可行的方法,因为1)绘图/布局选项卡的数量会有所不同,2)您如何确定一个项目是否已经在集合中?没有EXISTS函数。那会是一个完全独立的函数吗?
我真的很想弄清楚这个数组的东西。它快把我逼疯了。
感谢您的输入。

Tuoni 发表于 2008-5-2 15:41:40

Tuoni:
这是CREATE PROJECT FILES按钮后面的代码。
这是它在直接窗口中吐出的内容。
这是基于您在我的第一篇文章中的图像中看到的内容。

SomeCallMeDave 发表于 2008-5-2 16:11:06

如果我正确地理解了您的目标(我可能没有...)David Blackmon发布的代码似乎完全符合您的要求——对于每个绘图,创建一个新的DwgInfo对象并将布局添加到其中,然后将其添加到集合中。如果需要,您可以编写一个在集合中循环的存在属性?

SomeCallMeDave 发表于 2008-5-2 16:13:23


收集是执行此操作的最佳方式吗? 还是数组会更好? 只是好奇。

Tuoni 发表于 2008-5-2 16:22:15

还有一个问题…
    Dim dwg1 As DwgInfo
    Dim dwg2 As DwgInfo
提供的代码有2个变暗。我猜,当我遇到更多的图画时,我怎么能在飞行中更“暗淡”
这是一段很长的时间,我已经盯着这段代码看了好几个小时,它变得模糊了,所以如果我问了一些“愚蠢”的问题,请原谅我。   

SomeCallMeDave 发表于 2008-5-2 16:24:03


收集是执行此操作的最佳方式吗? 还是数组会更好? 只是好奇。
真的,这取决于你想用它们做什么。 与数组相比,集合有几个优点 - 添加它们很容易,与数组不同,您不必担心它有多满,是否有空间,空间在哪里; 其次,您可以按索引或按键引用集合中的项目,数组您只能使用索引... 从理论上讲,集合比数组慢,但是我怀疑你会注意到。 但是,要记住的一件事是,集合的索引从 1 开始,而不是 0

Kerry 发表于 2008-5-2 16:38:00

你应该能够在循环中创建对象,就像这样:(注意,未经测试)
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

无论如何,类似的东西。 您需要对此进行一些健全性检查 - 再次,未经测试

Tuoni 发表于 2008-5-2 16:38:33

您可以调暗一个变量并反复使用它
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
查看完整版本: 有数组吗?