[as3]冒个泡
package
{
import flash.display.Sprite;
import flash.text.TextField;
import flash.system.Capabilities;
public class test extends Sprite
{
private var board:TextField = new TextField();
public function test()
{
board.width = Capabilities.screenResolutionX;
board.height = Capabilities.screenResolutionY;
board.multiline = true;
board.wordWrap = true;
addChild(board);
var a:Array = createArray(16);
a = 100;
show(a);
sort(a);
show(a);
var c:int = search(a, 100);
if (c != -1 && c >= 0)
show("100的位置在:" + String(c+1));
else
show("数组中没找到100");
}
private function createArray(c:int):Array
{
var a:Array = new Array(c);
for (var i:int = 0; i < c; i++)
{
a = int(Math.random()*1000);
}
return a;
}
private function sort(a:Array):void
{
for (var i:int = (a.length - 1); i > 0; i--)
{
for (var j:int = 0; j < i; j++)
{
if (a > a)
{
var t:int = a;
a = a;
a = t;
}
}
}
}
private function search(a:Array, v:int):int
{
var l:int = 0;
var h:int = a.length - 1;
var m:int;
while (l <= h)
{
m = (l + h) >>> 1;
if(a < v)
l = m + 1;
else if(a > v)
h = m - 1;
else
return m;
}
return -1;
}
private function find(a:Array):Object
{
var obj:Object;
return obj;
}
private function show(o:Object):void
{
this.board.appendText(String(o) + "\n");
}
}
}
果然是冒泡么 =v=
话说容器里都是同一个类型的话,干脆用泛型吧~
在FlashPlayer 10上的ActionScript 3可以用Vector.<int>这样来声明一个类似数组的泛型容器,效率也比一般数组高。 Vector就是内存中连续分布的数组吧。不是和Array差不多么?
我看的是flash as programming,里面没说泛型。
但在别人的库里,我看到有用*不确定类型来写的,这个东西可以当泛型用么? Array可以用作稀疏数组或者密集数组,为了应对稀疏的用法,Array在AS3里的效率会稍微低一些。而Vector.<T>总是密集的,外加有机会减少类型检查,运行效率能高一些。
你看的资料要够新才行。Vector.<T>是在FlashPlayer 10开始才加入的,老的书上自然是没有。
*跟泛型完全不是一回事。*是“任意类型”,不做任何类型限制,也没有编译时类型检查;泛型参数在编译时是会检查的。ActionScript 3有严格模式和普通模式,前者要求声明类型,所以需要用*;其实用*跟后者不写类型标记达到的效果是一样的…… 原来是这样,看来还是得去看e文的文档,中文的都比较滞后.
页:
[1]