- ベストアンサー
配列をソートする方法
- ArrayクラスのsortOn()を使って配列をソートする方法を教えてください。
- 現在、配列を使用して3つの矩形のSpriteを配置していますが、x座標の大きい順に並び替えたいです。
- arr.sortOn(arr.x, Array.NUMERIC)と書いてもうまく動作しません。どのように書けばいいのでしょうか?
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
sortOnの第一引数はフィールド名のStringですよ var arr:Array = new Array(); for (var i:int=0; i<3; i++) { arr[i]= new Sprite(); with (arr[i].graphics) { beginFill(0x666666); drawRect(0,0,8,8); endFill(); } arr[i].x = i*10; addChild(arr[i]); } for each(var spr in arr)trace(spr.x) arr.sortOn("x",2||16) for each(spr in arr)trace(spr.x) あと、降順に並べたいなら 第二引数に2もしくはArray.DESCENDINGを追加 やりたい事が順番を逆に したいだけだったら arr.reverse()でもいいかと思います
その他の回答 (2)
- himajin100000
- ベストアンサー率54% (1660/3060)
package Q5748950 { import flash.display.Sprite; import flash.text.TextField; import flash.events.Event; /** * ... * @author himajin100000 */ public class Main extends Sprite { private var textField1:TextField; public function Main() { /* Flash使ってなくてよくわからん。とりあえず適当なところに表示させることにした。*/ textField1 = new TextField(); textField1.width = 1000; textField1.height = 1000; this.addChild(textField1); /* ここから */ var arr:Array = new Array(); for(var i:int = 0; i < 5; i++) { var tmp:Sprite = new Sprite(); tmp.x = Math.round(Math.random() * 10); tmp.y = Math.round(Math.random() * 10); textField1.appendText("("); textField1.appendText(tmp.x.toString()); textField1.appendText(","); textField1.appendText(tmp.y.toString()); textField1.appendText(")"); textField1.appendText("\n"); arr[i] = tmp; } textField1.appendText("*************\n"); arr.sortOn(["x"], Array.NUMERIC | Array.DESCENDING); for (var j:int = 0; j < arr.length; j++) { textField1.appendText("("); textField1.appendText(Sprite(arr[j]).x.toString()); textField1.appendText(","); textField1.appendText(Sprite(arr[j]).y.toString()); textField1.appendText(")"); textField1.appendText("\n"); } /* ここまで */ /* 正直言うとこっちの方が好きになれそう */ /* var v:Vector.<Sprite> = new Vector.<Sprite>(); //Flash Player 10以降 for(var k:int = 0; k < 5; k++) { var tmp2:Sprite = new Sprite(); tmp2.x = Math.round(Math.random() * 10); tmp2.y = Math.round(Math.random() * 10); v.push(tmp2) } v.forEach(function(x1:Sprite,x2:int,v1:Vector.<Sprite>):void { textField1.appendText("("); textField1.appendText(x1.x.toString()); textField1.appendText(","); textField1.appendText(x1.y.toString()); textField1.appendText(")"); textField1.appendText("\n"); return; }); textField1.appendText("**************\n"); v.sort(function(x1:Sprite, x2:Sprite):Number { return -(x1.x - x2.x); } ); v.forEach(function(x1:Sprite,x2:int,v1:Vector.<Sprite>):void { textField1.appendText("("); textField1.appendText(x1.x.toString()); textField1.appendText(","); textField1.appendText(x1.y.toString()); textField1.appendText(")"); textField1.appendText("\n"); return; }); */ } } }
お礼
お返事が遅くなり申し訳ありません。 ありがとうございます、やってみようと思います!
- BlurFiltan
- ベストアンサー率91% (1611/1754)
しようとされていることが良くわかりませんが, こんな感じ↓でしょうか? ==================================== // ※検証用:色配列データの作成 (赤,緑,青) var col_arr:Array = new Array(0xFF6666,0x66FF66,0x6666FF); var arr:Array = new Array(); // X座標用配列を作成 var x_arr:Array = new Array(); for (var i:int=0; i<3; i++) { arr[i] = new Sprite(); with (arr[i].graphics) { // ※検証用:塗り分け beginFill(col_arr[i]); drawRect(0,0,8,8); endFill(); } x_arr[i]=i*10; addChild(arr[i]); } x_arr.sort(Array.NUMERIC | Array.DESCENDING); for (i=0; i<3; i++) { arr[i].x = x_arr[i]; } ==================================== 一応, arr[0].x = 20; arr[1].x = 10; arr[2].x = 0; にはなると思います。
お礼
お返事が遅くなり申し訳ありません。 ありがとうございます、やってみようと思います!
お礼
お返事が遅くなり申し訳ありません。 ありがとうございます、やってみようと思います!