注册 登录
编程论坛 VB6论坛

【抛砖引玉】关于数组自动增加定义范围的算法

renxiaoyao36 发布于 2015-10-18 20:44, 1126 次点击
这是我的算法
程序代码:
Dim IndexMP3 As Integer
   DoEvents

 Do Until SearchedFileMP3(IndexMP3) = ""
   DoEvents

 ReDim SearchedFileMP3(1 To IndexMP3): IndexMP3 = IndexMP3 + 1
   DoEvents

 SearchedFileMP3(IndexMP3) = Dir(MyFile & "\*.mp3")
Loop

只要管里面的数组定义部分,其他的DIR之类的是我的程序里的功能,不要在意
在此我请教一下大家有没有更好的算法能够让数组的下标不断根据需求增加并且代码更加简洁呢?
5 回复
#2
renxiaoyao362015-10-18 22:08
另外请教一下 数组如何降低下标?比如我A(2)的值清空为"",将他Redim A(0 to 1)会出错么?
#3
风吹过b2015-10-18 22:27
ReDim 语句

在过程级别中使用,用于为动态数组变量重新分配存储空间。

语法

ReDim [Preserve] varname(subscripts) [As type] [, varname(subscripts) [As type]] . . .
如果使用了 Preserve 关键字,就只能重定义数组最末维的大小,且根本不能改变维数的数目。例如,如果数组就是一维的,则可以重定义该维的大小,因为它是最末维,也是仅有的一维。不过,如果数组是二维或更多维时,则只有改变其最末维才能同时仍保留数组中的内容。下面的示例介绍了如何在为已有的动态数组增加其最末维大小的同时而不清除其中所含的任何数据。
ReDim X(10, 10, 10)
. . .
ReDim Preserve X(10, 10, 15)
同样地,在使用 Preserve 时,只能通过改变上界来改变数组的大小;改变下界则会导致错误。
如果将数组改小,则被删除的元素中的数据就会丢失。如果按地址将数组传递给某个过程,那么不要在该过程内重定义该数组的各维的大小。

------------------------------------------------
以上是MSDN 里的解释。

根据这个解释,那么你这句有问题:
ReDim SearchedFileMP3(1 To IndexMP3): IndexMP3 = IndexMP3 + 1
会造成 之前的数据内容丢失。

================

Dim t1 As Double, t2 As Double
Dim n As Long
Dim s As String
t1 = Timer
n = 0
s = Dir(filepath)
Do While s <> ""
    n = n + 1
    ReDim Preserve a(n)
    a(n) = s
    s = Dir
Loop
t2 = Timer
Cls
Print "文件总数:"; n
Print "开始时间:"; t1
Print "结束时间:"; t2
Print "消耗时间:", Format(t2 - t1, "0.00000")
#4
xiangyue05102015-10-18 22:37
你的代码其实算是蛮简洁了,就是另外一个版主说的要用Preserve。否则只有最后一个数据,前面全是空值
redim处理可变数组最多也就是2、3维的情况,如果再复杂容易出错,我建议用数据库。
以下是引用renxiaoyao36在2015-10-18 20:44:09的发言:
这是我的算法
 Dim IndexMP3 As Integer
   DoEvents
 Do Until SearchedFileMP3(IndexMP3) = ""
   DoEvents
 ReDim SearchedFileMP3(1 To IndexMP3): IndexMP3 = IndexMP3 + 1
   DoEvents
 SearchedFileMP3(IndexMP3) = Dir(MyFile & "\*.mp3")
Loop

只要管里面的数组定义部分,其他的DIR之类的是我的程序里的功能,不要在意
在此我请教一下大家有没有更好的算法能够让数组的下标不断根据需求增加并且代码更加简洁呢?
#5
renxiaoyao362015-10-19 20:14
感谢各位对我的帖子的关注,另外,我那句有问题的代码改成这样可以么?
ReDim preserve SearchedFileMP3(1 to indexmp3): IndexMP3 = IndexMP3 + 1

[此贴子已经被作者于2015-10-19 20:16编辑过]

#6
xiangyue05102015-10-20 09:29
目测不会有问题。
1