アプリ版:「スタンプのみでお礼する」機能のリリースについて

配列をソートしたいです

ArrayクラスのsortOn()を使って、
「x座標の大きい順」に順番をならべ変えたいのですが
上手く行きません。。


現在、配列を使い
3つの矩形のSpriteを配置しています。
↓現在のコード
=====================================
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]);
}
=====================================


今、各Spriteのxプロパティは
 arr[0].x = 0;
 arr[1].x = 10;
 arr[2].x = 20;
になっているのですが、

これをソートして
 arr[0].x = 20;
 arr[1].x = 10;
 arr[2].x = 0;
にならべ変えたいのですが、
どのように書けばいいのかがわかりません。。

今、このように書いてるのですが
arr.sortOn(arr.x, Array.NUMERIC);

並べ替えができません、
(おそらく arr.x が駄目なのだと思うのですが。。)

どなたかご存知の方いらっしゃいましたら
どうかよろしくお願いいたします。

A 回答 (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()でもいいかと思います
    • good
    • 0
この回答へのお礼

お返事が遅くなり申し訳ありません。
ありがとうございます、やってみようと思います!

お礼日時:2010/04/18 16:18

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;
});
*/

}

}

}
    • good
    • 0
この回答へのお礼

お返事が遅くなり申し訳ありません。
ありがとうございます、やってみようと思います!

お礼日時:2010/04/18 16:17

しようとされていることが良くわかりませんが,


こんな感じ↓でしょうか?

====================================
// ※検証用:色配列データの作成 (赤,緑,青)
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;

にはなると思います。
    • good
    • 0
この回答へのお礼

お返事が遅くなり申し訳ありません。
ありがとうございます、やってみようと思います!

お礼日時:2010/04/18 16:17

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!