转至繁体中文版     | 网站首页 | 图文教程 | 资源下载 | 站长博客 | 图片素材 | 武汉seo | 武汉网站优化 | 
最新公告:     敏韬网|教学资源学习资料永久免费分享站!  [mintao  2008年9月2日]        
您现在的位置: 学习笔记 >> 图文教程 >> 软件开发 >> VB.NET程序 >> 正文
你抄近道了吗?——源自两个VBS过程的感慨         ★★★★

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

作者:闵涛 文章来源:闵涛的学习笔记 点击数:738 更新时间:2009/4/23 15:43:43

原文地址:
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相比的确弱了一些。

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


没有相关教程
教程录入:mintao    责任编辑:mintao 
  • 上一篇教程:

  • 下一篇教程:
  • 【字体: 】【发表评论】【加入收藏】【告诉好友】【打印此文】【关闭窗口
      注:本站部分文章源于互联网,版权归原作者所有!如有侵权,请原作者与本站联系,本站将立即删除! 本站文章除特别注明外均可转载,但需注明出处! [MinTao学以致用网]
      网友评论:(只显示最新10条。评论内容只代表网友观点,与本站立场无关!)

    同类栏目
    · C语言系列  · VB.NET程序
    · JAVA开发  · Delphi程序
    · 脚本语言
    更多内容
    热门推荐 更多内容
  • 没有教程
  • 赞助链接
    更多内容
    闵涛博文 更多关于武汉SEO的内容
    500 - 内部服务器错误。

    500 - 内部服务器错误。

    您查找的资源存在问题,因而无法显示。

    | 设为首页 |加入收藏 | 联系站长 | 友情链接 | 版权申明 | 广告服务
    MinTao学以致用网

    Copyright @ 2007-2012 敏韬网(敏而好学,文韬武略--MinTao.Net)(学习笔记) Inc All Rights Reserved.
    闵涛 投放广告、内容合作请Q我! E_mail:admin@mintao.net(欢迎提供学习资源)

    站长:MinTao ICP备案号:鄂ICP备11006601号-18

    闵涛站盟:医药大全-武穴网A打造BCD……
    咸宁网络警察报警平台