Skip to content

Instantly share code, notes, and snippets.

@nowri
Created March 20, 2012 07:51
Show Gist options
  • Save nowri/2132588 to your computer and use it in GitHub Desktop.
Save nowri/2132588 to your computer and use it in GitHub Desktop.
中身がObject型のVectorをソートする
// @see http://flashjp.com/as3/vector3.php
/*
ここではObject型の中身を持つVectorのソートをしてみます。
先ほどと同様に使い慣れたArrayで実行してみます。
このような場合、sortOnメソッドを使えば可能です。
*/
var arr:Array = new Array();
arr[0] = { name:"apple" , price:98 };
arr[1] = { name:"banana" , price:198 };
arr[2] = { name:"chocolate" , price:148 };
arr.sortOn("price",Array.NUMERIC);
/*
これで"price"の値が小さい順にソートしてくれます。
ところが、、、!
VectorクラスにはこのsortOnメソッドがないのです。
Vectorインスタンスに.sortOn(、、、としてもコンパイル時にエラーが出ます。
ここでVectorクラスのsortメソッドの解説を見ると、sortメソッドの引数にcompareFunction:Functionを設定できるとあるので、これを使えばOK。
*/
var vec:Vector.<Object> = new Vector.<Object>();
vec[0] = { name:"apple" , price:98 };
vec[1] = { name:"banana" , price:198 };
vec[2] = { name:"chocolate" , price:148 };
vec.sort(compareFunction);
function compareFunction(x:Object, y:Object):Number {
return x.price - y.price;//値が小さい順
}
/*
マニュアルによると、compareFunctionはNumber(0か正の数か負の数)を返せばいいので、上記のようにすれば値が小さい順でソートができます。
また、y.price - x.priceとすれば、値が大きい順にソートしてくれます。
*/
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment