乐筑天下

搜索
欢迎各位开发者和用户入驻本平台 尊重版权,从我做起,拒绝盗版,拒绝倒卖 签到、发布资源、邀请好友注册,可以获得银币 请注意保管好自己的密码,避免账户资金被盗
查看: 139|回复: 10

2D阵列帮助

[复制链接]

6

主题

103

帖子

2

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
127
发表于 2008-2-11 22:24:28 | 显示全部楼层 |阅读模式
我一直在努力理解这个2D数组的东西。我希望能够将1)绘图名称和2)布局选项卡名称存储在数组中。我猜这将是一个2D数组。我遇到的最大问题是REDIM部分。数组的大小会有所不同,我不知道如何正确调整它的大小。我一直收到错误,_obviously_我做错了什么。
这是我到目前为止得到的...
  1. Public Sub SheetCount()
  2.     Dim oSheet As AcSmSheet
  3.     Dim nSheetCount As Integer
  4.     Dim oEnumDB As IAcSmEnumDatabase
  5.     Dim oItem As IAcSmPersist
  6.    
  7.     Dim oSheetSetMgr As AcSmSheetSetMgr
  8.     Set oSheetSetMgr = New AcSmSheetSetMgr
  9.    
  10.     Set oEnumDB = oSheetSetMgr.GetDatabaseEnumerator
  11.     Set oItem = oEnumDB.Next
  12.    
  13.     Dim oSheetDb As AcSmDatabase
  14.     Dim strFileInfo() As String
  15.     ReDim strFileInfo(nSheetCount, 2)
  16.    
  17.     Do While Not oItem Is Nothing
  18.         Set oSheetDb = oItem
  19.         Dim oEnum As IAcSmEnumPersist
  20.         Dim oItemSh As IAcSmPersist
  21.         
  22.         Set oEnum = oSheetDb.GetEnumerator
  23.         Set oItemSh = oEnum.Next
  24.         Do While Not oItemSh Is Nothing
  25.             If oItemSh.GetTypeName = "AcSmSheet" Then
  26.                 Set oSheet = oItemSh
  27.                 nSheetCount = nSheetCount + 1
  28.                 strFileInfo(nSheetCount, 1) = oSheet.GetLayout.ResolveFileName
  29.                 strFileInfo(nSheetCount, 2) = oSheet.GetNumber
  30.                 ReDim Preserve strFileInfo(1, UBound(strFileInfo) + 1)
  31.             End If
  32.             
  33.             Set oItemSh = oEnum.Next
  34.         Loop
  35.         MsgBox nSheetCount
  36.         Set oItem = oEnumDB.Next
  37.     Loop
  38. End Sub

...或者集合或字典更适合使用?

本帖以下内容被隐藏保护;需要你回复后,才能看到!

游客,如果您要查看本帖隐藏内容请回复
回复

使用道具 举报

0

主题

9

帖子

4

银币

初来乍到

Rank: 1

铜币
12
发表于 2008-2-11 23:19:35 | 显示全部楼层
如果我假装理解你想做什么(或者你的代码在做什么),即重新设置并保留2D数组的两个维度(看起来你想减少第一个维度并增加第二个维度),恐怕你不能。使用保留时,您只能调整最后一个维度的大小;在您的情况下是第二个维度。
如果您无法在这些行中解决您的挑战,您可能不得不滚动自己的(集合)类。
我的...迈克尔
回复

使用道具 举报

0

主题

11

帖子

5

银币

初来乍到

Rank: 1

铜币
12
发表于 2008-2-12 05:20:53 | 显示全部楼层
我想知道有多少程序员使用下面的方法(此任务的脏方法)
无论如何,它是有效的
  1. Sub test()
  2. ' define the first dimension of array approximately
  3. Dim ar(9999, 1)
  4. Dim i As Long, j As Long
  5. ' here you'll populate an array at runtime,
  6. ' as many as you need (of course you don't know how much)
  7. ' just for example
  8. For i = 0 To 333
  9. ar(i, 0) = i + 1: ar(i, 1) = i + 3
  10. Next
  11. ' declare the new hard bounded array instead
  12. ReDim newar(i - 1, 1)
  13. While Not IsEmpty(ar(j, 0))
  14. newar(j, 0) = ar(j, 0): newar(j, 1) = ar(j, 1)
  15. j = j + 1
  16. Wend
  17. ' return new array
  18. End Sub

顺便说一句,我也喜欢使用集合
~'J'~
回复

使用道具 举报

2

主题

17

帖子

9

银币

初来乍到

Rank: 1

铜币
27
发表于 2008-2-12 06:12:34 | 显示全部楼层

如果你不能在这些行中解决你的挑战,你可能不得不推出你自己的(收集)类。
我的...迈克尔

我想它会增加的。
谢谢你的信息。昨晚晚些时候我发布了这个后发现了这个。我会看看我能做些什么。
回复

使用道具 举报

5

主题

16

帖子

8

银币

初来乍到

Rank: 1

铜币
39
发表于 2008-2-12 06:14:19 | 显示全部楼层

我更喜欢使用集合,但我不确定如何存储绘图的名称和布局选项卡名称,并能够将两者“链接”在一起。 我在这个上面画了一个空白。 您可以发布摘要吗?
谢谢。
回复

使用道具 举报

0

主题

6

帖子

5

银币

初来乍到

Rank: 1

铜币
7
发表于 2008-2-12 06:44:49 | 显示全部楼层
听起来像一个锯齿阵列…这是你需要托管的信息吗
|Drawing1|
Layout1|
Layout2|
Drawing2|
Layout2 |
layot2
拉yout2<td>布局1|<td>布局2|<td><tr><td>布局4|>布局1 |
Layout5|

如果是这样的话,您可以通过多种方式做到这一点,而无需滚动自己的类,尽管滚动自己的类会对客户端应用程序隐藏混乱的细节,只暴露出使其看起来优雅所需的东西。我说过要出现,不是吗
一种方法是使用集合作为主容器,使用动态数组作为项。需要明确的是:集合中的每个项目都是一个动态二维数组,第一个维度始终为1(托管图形名称),第二个维度根据需要增长以托管多个(和变化的)布局名称。从表面上看,我喜欢这种方式,因为您的数据仍然是键入的
上述方法的一个变体是将集合中的每个项作为动态一维字符串数组。第一个数组元素是图形名称,后续元素是布局名称。比前面的更简单,并且您的数据仍然是键入的
另一种方法是使用集合集合。每个子集合都会根据需要增长,每个子集合中的第一项是图形名称,后续项是布局。从几何角度讲,将主集合视为垂直集合,将每个子集合视为水平集合。我能做到,但我对此并不挑剔
另一个是集合的动态数组;给猫剥皮的方法很多。并不是所有人都很好|高效
当然,所有这些都是杂乱无章的,这就是为什么.net提供了锯齿状数组(在lisp中,这是一个不言自明的问题)
Ackkk。
回复

使用道具 举报

0

主题

8

帖子

5

银币

初来乍到

Rank: 1

铜币
9
发表于 2008-2-12 07:20:43 | 显示全部楼层
还可以创建承载动态数组的 UDT,然后创建所述 UDT 的动态数组。
回复

使用道具 举报

0

主题

9

帖子

6

银币

初来乍到

Rank: 1

铜币
12
发表于 2008-2-12 08:03:11 | 显示全部楼层

嗯…锯齿状??!?从没听说过这个,但听起来像是我想要的。你能用英语说更多吗??   
回复

使用道具 举报

0

主题

10

帖子

5

银币

初来乍到

Rank: 1

铜币
11
发表于 2008-2-12 08:38:48 | 显示全部楼层

锯齿阵列只是阵列的阵列,其中每个阵列的长度可以变化。
例如,具有5个子阵列的阵列,第2项和第6项分别为
|item1|
item2|
item3|
item1 |
项目3|
项目4|
.td>项目2|
项目3|
|项目1|
项目2 |
|

在.NET中受支持(我在C#中试用过),但在VBA中不受支持,如前所述。UDT数组方法是最有效的内存方式,也是全类型的。
回复

使用道具 举报

0

主题

10

帖子

5

银币

初来乍到

Rank: 1

铜币
12
发表于 2008-2-12 08:46:56 | 显示全部楼层

交错数组只是数组的数组,其中每个数组的长度可以变化。
例如,一个包含 5 个子数组的数组,每个子数组的长度分别为 3、4、3、2 和 6 --
| item1 |
项目2 |
项目3 |
|项目1 |
项目2 |
项目3 |
项目4 |
|项目1 |
项目2 |
项目3 |
|项目1 |
项目2 |
|项目1 |
项目2 |
项目3 |
项目4 |
项目5 |
项目6 |

在.NET中受支持(我在C#中尝试过它们),但在VBA中不受支持,如前所述。UDT 数组方法是最有效的内存方法,也是完全类型化的。

你有没有关于锯齿状数组和UDT的好链接或片段 - 这两件事我没有经验! 谢谢。
回复

使用道具 举报

发表回复

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

  • 微信公众平台

  • 扫描访问手机版

  • 点击图片下载手机App

QQ|关于我们|小黑屋|乐筑天下 繁体中文

GMT+8, 2025-7-5 09:42 , Processed in 0.423677 second(s), 72 queries .

© 2020-2025 乐筑天下

联系客服 关注微信 帮助中心 下载APP 返回顶部 返回列表