| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1105 人关注过本帖
标题:【抛砖引玉】关于数组自动增加定义范围的算法
只看楼主 加入收藏
renxiaoyao36
Rank: 9Rank: 9Rank: 9
来 自:七宝中学
等 级:贵宾
威 望:31
帖 子:347
专家分:1077
注 册:2014-9-18
结帖率:92.31%
收藏
 问题点数:0 回复次数:5 
【抛砖引玉】关于数组自动增加定义范围的算法
这是我的算法
程序代码:
 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之类的是我的程序里的功能,不要在意
在此我请教一下大家有没有更好的算法能够让数组的下标不断根据需求增加并且代码更加简洁呢?
搜索更多相关主题的帖子: color 
2015-10-18 20:44
renxiaoyao36
Rank: 9Rank: 9Rank: 9
来 自:七宝中学
等 级:贵宾
威 望:31
帖 子:347
专家分:1077
注 册:2014-9-18
收藏
得分:0 
另外请教一下 数组如何降低下标?比如我A(2)的值清空为"",将他Redim A(0 to 1)会出错么?

编程蛋疼的不是枯燥,而是辛辛苦苦编完几百行的代码,运行,“Runtime Error “xxx””。
2015-10-18 22:08
风吹过b
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:贵宾
威 望:364
帖 子:4943
专家分:30067
注 册:2008-10-15
收藏
得分:0 
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")

授人于鱼,不如授人于渔
早已停用QQ了
2015-10-18 22:27
xiangyue0510
Rank: 14Rank: 14Rank: 14Rank: 14
等 级:贵宾
威 望:86
帖 子:938
专家分:5244
注 册:2015-8-10
收藏
得分:0 
你的代码其实算是蛮简洁了,就是另外一个版主说的要用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之类的是我的程序里的功能,不要在意
在此我请教一下大家有没有更好的算法能够让数组的下标不断根据需求增加并且代码更加简洁呢?
2015-10-18 22:37
renxiaoyao36
Rank: 9Rank: 9Rank: 9
来 自:七宝中学
等 级:贵宾
威 望:31
帖 子:347
专家分:1077
注 册:2014-9-18
收藏
得分:0 
感谢各位对我的帖子的关注,另外,我那句有问题的代码改成这样可以么?
ReDim preserve SearchedFileMP3(1 to indexmp3): IndexMP3 = IndexMP3 + 1

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


编程蛋疼的不是枯燥,而是辛辛苦苦编完几百行的代码,运行,“Runtime Error “xxx””。
2015-10-19 20:14
xiangyue0510
Rank: 14Rank: 14Rank: 14Rank: 14
等 级:贵宾
威 望:86
帖 子:938
专家分:5244
注 册:2015-8-10
收藏
得分:0 
目测不会有问题。
2015-10-20 09:29
快速回复:【抛砖引玉】关于数组自动增加定义范围的算法
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.016764 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved