乐筑天下

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

Redim数组

[复制链接]

4

主题

17

帖子

3

银币

初来乍到

Rank: 1

铜币
33
发表于 2014-1-26 11:28:16 | 显示全部楼层 |阅读模式
我想从两个数组中删除重复的x和它们相关的y,但是我收到了这个错误:
数组已经划分了维度!
我的代码有什么问题?
假设我有这些值,并且我想删除重复的第三行[(X2)和Y(2)]:
Dim x(0到3)为Double,y(0到3)为Double x(0)= 0.29
Y(0)= 0.89
x(1)= 0.34
Y(1)= 0.44
x(2)= 0.29
Y(2)= 0.89
x代码0]

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

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

使用道具 举报

1

主题

1069

帖子

1050

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
69
发表于 2014-1-27 02:41:37 | 显示全部楼层
您无法
在多个数组中重新绘制第一个维度,只能重新创建第二个
数组 以下是如何在删除重复后重新创建新数组的方法

  1. 'make sure you checked in Tools->Options->General->Error trapping->'Break on Unhandled Errors'
  2. Sub TestRemove_Dupes()
  3. Dim x(0 To 3) As Double, y(0 To 3) As Double
  4. x(0) = 0.29
  5. y(0) = 0.89
  6. x(1) = 0.34
  7. y(1) = 0.44
  8. x(2) = 0.29
  9. y(2) = 0.89
  10. x(3) = 0.12
  11. y(3) = 0.86
  12. Dim coll As New Collection
  13. Dim i, j
  14. Dim itm(0 To 1)
  15. For i = 0 To UBound(x)
  16. itm(0) = x(i): itm(1) = y(i)
  17. On Error Resume Next
  18. coll.Add itm, CStr(x(i)) & CStr(y(i))
  19. Next
  20. ReDim ar(0 To coll.Count - 1, 0 To 1)
  21. 'colllection items starts from 1
  22. For i = 1 To coll.Count
  23. ar(i - 1, 0) = coll.item(i)(0): ar(i - 1, 1) = coll.item(i)(1)
  24. Next
  25. For i = 0 To UBound(ar)
  26. Debug.Print ar(i, 0) & " | " & ar(i, 1)
  27. Next
  28. End Sub

回复

使用道具 举报

4

主题

17

帖子

3

银币

初来乍到

Rank: 1

铜币
33
发表于 2014-1-28 07:50:07 | 显示全部楼层

嗨,菲索。感谢您高效的解决方案。但我很抱歉反应太晚了。我有点忙,有一些事情要做<真诚地,罗伯特
回复

使用道具 举报

1

主题

1069

帖子

1050

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
69
发表于 2014-1-28 11:17:50 | 显示全部楼层
NP
祝你有美好的一天
回复

使用道具 举报

12

主题

175

帖子

77

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
149
发表于 2014-1-29 01:59:06 | 显示全部楼层
或者,您可以在主 Sub(调用“Remove_Duplicate”Sub 的子集)中声明没有维度的向量,并立即使用初始已知维度重新填充它们(在此阶段不需要“保留”关键字)。然后在移动值循环完成后,使用 Sub 内的“保留”关键字再次重新标记它们。就像 follows
  1. Sub Main()
  2. Dim X() As Double, Y() As Double
  3. ReDim X(0 To 3)
  4. ReDim Y(0 To 3)
  5. X(0) = 0.29
  6. Y(0) = 0.89
  7. X(1) = 0.34
  8. Y(1) = 0.44
  9. X(2) = 0.29
  10. Y(2) = 0.89
  11. X(3) = 0.12
  12. Y(3) = 0.86
  13. Call Remove_Duplicate(X, Y, 2)
  14. End Sub
  15. Private Sub Remove_Duplicate(X() As Double, Y() As Double, MyIndex As Long)
  16. Dim i As Long
  17. Dim UbX As Integer
  18. UbX = UBound(X) ' we'll assume the same dimension for Y()
  19. For i = MyIndex + 1 To UbX
  20.     X(i - 1) = X(i)
  21.     Y(i - 1) = Y(i)
  22. Next
  23. ReDim Preserve Y(UbX - 1)
  24. ReDim Preserve X(UbX - 1)
  25. End Sub

它肯定不如 Fixo 的建议那么有趣(他的知识总是让我感到震惊),也不知道效率是否更低。另一方面,它更短,这总是吸引我。
再见
回复

使用道具 举报

1

主题

1069

帖子

1050

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
69
发表于 2014-1-29 06:05:31 | 显示全部楼层
好照片,我喜欢
致意
回复

使用道具 举报

4

主题

17

帖子

3

银币

初来乍到

Rank: 1

铜币
33
发表于 2014-1-29 09:12:26 | 显示全部楼层
鼓掌RICVBA,非常好的技术
当然,我今晚会用它。
谢谢,祝您愉快...
回复

使用道具 举报

发表回复

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

本版积分规则

  • 微信公众平台

  • 扫描访问手机版

  • 点击图片下载手机App

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

GMT+8, 2025-4-20 18:27 , Processed in 2.930344 second(s), 67 queries .

© 2020-2025 乐筑天下

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