找回密码
 立即注册
搜索
热搜: 活动 交友 discuz
查看: 3071|回复: 4

[as3]冒个泡

[复制链接]
发表于 2009-4-5 23:03:09 | 显示全部楼层 |阅读模式
  1. package  
  2. {
  3.     import flash.display.Sprite;
  4.     import flash.text.TextField;
  5.     import flash.system.Capabilities;
  6.     public class test extends Sprite
  7.     {
  8.         private var board:TextField = new TextField();
  9.         
  10.         public function test()
  11.         {
  12.             board.width = Capabilities.screenResolutionX;
  13.             board.height = Capabilities.screenResolutionY;
  14.             board.multiline = true;
  15.             board.wordWrap = true;
  16.             addChild(board);
  17.             
  18.             var a:Array = createArray(16);
  19.             a[0] = 100;
  20.             show(a);
  21.             sort(a);
  22.             show(a);
  23.             
  24.             var c:int = search(a, 100);
  25.             
  26.             if (c != -1 && c >= 0)
  27.                 show("100的位置在:" + String(c+1));
  28.             else
  29.                 show("数组中没找到100");
  30.             
  31.         }
  32.         
  33.         private function createArray(c:int):Array
  34.         {
  35.             var a:Array = new Array(c);
  36.             for (var i:int = 0; i < c; i++)
  37.             {
  38.                 a[i] = int(Math.random()*1000);
  39.             }
  40.             return a;
  41.         }
  42.         
  43.         
  44.         private function sort(a:Array):void
  45.         {   
  46.             for (var i:int = (a.length - 1); i > 0; i--)
  47.             {
  48.                 for (var j:int = 0; j < i; j++)
  49.                 {
  50.                     if (a[j] > a[j+1])
  51.                     {
  52.                         var t:int = a[j];
  53.                         a[j] = a[j+1];
  54.                         a[j+1] = t;
  55.                     }
  56.                 }
  57.             }
  58.         }
  59.         private function search(a:Array, v:int):int
  60.         {
  61.             var l:int = 0;
  62.             var h:int = a.length - 1;
  63.             var m:int;
  64.             
  65.             while (l <= h)
  66.             {
  67.                 m = (l + h) >>> 1;
  68.                
  69.                 if(a[m] < v)
  70.                     l = m + 1;
  71.                 else if(a[m] > v)
  72.                     h = m - 1;
  73.                 else
  74.                     return m;
  75.             }
  76.             
  77.             return -1;
  78.         }
  79.         
  80.         private function find(a:Array):Object
  81.         {
  82.             var obj:Object;
  83.             return obj;
  84.         }
  85.         
  86.         private function show(o:Object):void
  87.         {
  88.             this.board.appendText(String(o) + "\n");
  89.         }
  90.     }
  91.    
  92. }
复制代码
发表于 2009-4-6 01:43:07 | 显示全部楼层
果然是冒泡么 =v=
话说容器里都是同一个类型的话,干脆用泛型吧~
在FlashPlayer 10上的ActionScript 3可以用Vector.<int>这样来声明一个类似数组的泛型容器,效率也比一般数组高。
 楼主| 发表于 2009-4-6 13:00:21 | 显示全部楼层
Vector就是内存中连续分布的数组吧。不是和Array差不多么?
我看的是flash as programming,里面没说泛型。
但在别人的库里,我看到有用*不确定类型来写的,这个东西可以当泛型用么?
发表于 2009-4-7 11:52:14 | 显示全部楼层
Array可以用作稀疏数组或者密集数组,为了应对稀疏的用法,Array在AS3里的效率会稍微低一些。而Vector.<T>总是密集的,外加有机会减少类型检查,运行效率能高一些。

你看的资料要够新才行。Vector.<T>是在FlashPlayer 10开始才加入的,老的书上自然是没有。

*跟泛型完全不是一回事。*是“任意类型”,不做任何类型限制,也没有编译时类型检查;泛型参数在编译时是会检查的。ActionScript 3有严格模式和普通模式,前者要求声明类型,所以需要用*;其实用*跟后者不写类型标记达到的效果是一样的……
 楼主| 发表于 2009-4-7 13:55:16 | 显示全部楼层
原来是这样,看来还是得去看e文的文档,中文的都比较滞后.
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|幻想森林

GMT+8, 2026-11-2 06:02 , Processed in 0.011136 second(s), 15 queries .

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

快速回复 返回顶部 返回列表