分享
 
 
 

你抄近道了吗?——源自两个VBS过程的感慨

王朝asp·作者佚名  2006-01-09
窄屏简体版  字體: |||超大  

原文地址:

http://blog.csdn.net/estyle/archive/2004/07/04/33828.aspx

欢迎转载!但请注明出处(原文地址)和我的姓名:靳田

谢谢啦! ^_^

本来打算把这篇文章也写成“浮想”的,但我觉得最近想得太多、务实太少。所以现在尽量把它写得务实一点吧!(尽力而为,这不是我的强项。)

前段时间做一个ASP的在线考试系统,多处使用到数组。但VBS的数组功能比较弱,于是我根据需要写了几个和数组相关的过程,作用不小哦!文章标题中提到的VBS过程就是其中两个,下面会贴出代码。

首先,我先问一个问题:在一个ASP项目中,需要对数组元素进行排序,说说你会怎么办?

用三十秒时间考虑考虑,然后继续往下看。

第一个函数是关于随机数组的,准确地说,是在一个数组中随机抽取指定数目的位置不重复元素组成新数组并返回。

如果是你写这样的函数,会怎么写呢?这可不是在考你,因为这本来就是一个简单的问题,很容易就能理出思路来。但是,很轻易就想出来的思路往往是传统的,虽然有效,但却不够高效。或许你认为,只要能解决问题就够了——不管黑猫白猫,能抓老鼠就是好猫!这个问题留在最后讨论,先看看我写的这个函数:

Function GetRandom(ByVal srcArr,ByVal tarNum)

'******************************************************

'

'作用:返回从源数组中随机抽取指定数目的位置不重复元素组成的新数组。

'参数:srcArr,源数组;tarNum,抽取位置不重复元素的数目。

'返回:数组

'作者:Estyle(靳田)

'注意:若tarNum大于源数组的元素个数或者小于等于0,函数可能出错。

'

'******************************************************

Dim srcNum,tarArr(),i,n

srcNum=UBound(srcArr)+1

Randomize

ReDim tarArr(tarNum-1)

For i=0 to tarNum-1

n=Int(Rnd*(srcNum-i))

tarArr(i)=srcArr(n)

srcArr(n)=srcArr(srcNum-1-i)

Next

GetRandom=tarArr

End Function

第二个是子过程,没有返回值,作用是把数组中重复的多余元素删除!也是比较简单的——可能相对上面那个要难一点。

感谢CSDN社区的fason(阿信),我是模仿他才写出这个过程的。如果让我自己写,不知道会不会把全球的迭代(还不习惯用递归)和判断都用完呢!当初看得fason兄的JScript实现的函数,着实眼前一亮!这个VBS版相比之下还是要差上一截,更何况是模仿的。向fason兄学习!

这个过程有一个缺陷,不能作用于元素是对象类型的数组……其实在我看来也不算缺陷,两个对象的比较是有悬念的,何况还不一定应用得到。下面是代码:

Sub DelRepeated(ByRef srcArr)

'******************************************************

'

'作用:从源数组中剔除多余的重复元素。

'参数:srcArr,源数组。

'返回:无

'作者:Estyle(靳田)

'注意:该函数对数值类型敏感,注意调用方法!

'

'******************************************************

Dim objDict,x

Set objDict=CreateObject("Scripting.Dictionary")

For Each x In srcArr

If Not objDict.Exists(x) Then

objDict.Add x,x

End If

Next

srcArr=objDict.Items

Set objDict=Nothing

End Sub

对这两个过程,我无须多说了吧?回头先讨论黑猫白猫的问题。

诚然,解决问题是最首要的任务。但如果不继续思考如何更好地解决问题,将至少导致两个方面的消极影响:

一、影响整个程序的执行效率!

同一作用的两个函数要体现性能差别是比较困难的,但如果不精益求精,程序中还有发展潜力的地方会有不少,这将直接导致整个程序的执行效率不佳。或许做开发的时候你体会不到,你也没有对自己的程序做详尽测试的习惯,但是如果你的程序应用在大压力的领域,使用者就会发现这个问题了——等他们把问题反馈给你就晚啦,很伤心的。

二、影响自己编程水平的提高!

这个就不用多说了吧?当然,作用时大时小,你也不用太过在意。

这篇文章没法总结,更多地需要大家自己思考!如果一定要总结,那就七个字:勇于创新,抄近道!

当然,不是所有情况都可以抄近道的,基本功还是要练好。

最后,回到最开始我们提出的数组排序的问题,你的答案是什么?难道你已经想好了一个非常简单、优雅而又高效的排序思路?

如果还没有,那为什么不用JScript中数组对象现成的sort()方法呢?——习惯成自然吧,ASP绝大部分情况下是依赖VBS的,但除了易学易用以外,VBS和JScript相比的确弱了一些。

我毕竟也很菜,厚着脸皮把自己觉得能说的都说了。——如果你不屑,大可一笑置之,不要丢我。

 
 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
2023年上半年GDP全球前十五强
 百态   2023-10-24
美众议院议长启动对拜登的弹劾调查
 百态   2023-09-13
上海、济南、武汉等多地出现不明坠落物
 探索   2023-09-06
印度或要将国名改为“巴拉特”
 百态   2023-09-06
男子为女友送行,买票不登机被捕
 百态   2023-08-20
手机地震预警功能怎么开?
 干货   2023-08-06
女子4年卖2套房花700多万做美容:不但没变美脸,面部还出现变形
 百态   2023-08-04
住户一楼被水淹 还冲来8头猪
 百态   2023-07-31
女子体内爬出大量瓜子状活虫
 百态   2023-07-25
地球连续35年收到神秘规律性信号,网友:不要回答!
 探索   2023-07-21
全球镓价格本周大涨27%
 探索   2023-07-09
钱都流向了那些不缺钱的人,苦都留给了能吃苦的人
 探索   2023-07-02
倩女手游刀客魅者强控制(强混乱强眩晕强睡眠)和对应控制抗性的关系
 百态   2020-08-20
美国5月9日最新疫情:美国确诊人数突破131万
 百态   2020-05-09
荷兰政府宣布将集体辞职
 干货   2020-04-30
倩女幽魂手游师徒任务情义春秋猜成语答案逍遥观:鹏程万里
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案神机营:射石饮羽
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案昆仑山:拔刀相助
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案天工阁:鬼斧神工
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案丝路古道:单枪匹马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:与虎谋皮
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:李代桃僵
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:指鹿为马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:小鸟依人
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:千金买邻
 干货   2019-11-12
 
推荐阅读
 
 
 
>>返回首頁<<
 
靜靜地坐在廢墟上,四周的荒凉一望無際,忽然覺得,淒涼也很美
© 2005- 王朝網路 版權所有