配列をソートしたいです
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 が駄目なのだと思うのですが。。)
どなたかご存知の方いらっしゃいましたら
どうかよろしくお願いいたします。
No.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()でもいいかと思います
No.2
- 回答日時:
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;
});
*/
}
}
}
No.1
- 回答日時:
しようとされていることが良くわかりませんが,
こんな感じ↓でしょうか?
====================================
// ※検証用:色配列データの作成 (赤,緑,青)
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;
にはなると思います。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Excel(エクセル) excel vbaの配列なんですが・・・ 1 2022/12/26 18:50
- C言語・C++・C# c言語 プログラムのエラー 1 2023/02/11 20:31
- JavaScript EasyUIのSubGrid(jquery)におけるObjectに入れた連想配列について 1 2022/05/02 11:21
- JavaScript 配列の1要素を代入した変数を使って元の配列要素を削除できるか 1 2023/07/28 03:34
- Visual Basic(VBA) vb.netです。2次元配列の要素をFor Eachでひとつづつ取得したい。 4 2022/07/05 11:30
- PHP c言語 文字 - '1'+26 3 2022/03/26 20:58
- C言語・C++・C# c言語 int temp = 0; if(isdigit(arr[i])){ temp=arr[i] 2 2022/03/27 01:44
- C言語・C++・C# int temp = 0; if(isdigit(arr[i])){//文字が数字であれば(0~9) 1 2022/03/27 01:37
- C言語・C++・C# c言語の問題です 課題1 (二分探索木とセット) 大きさ size の配列 array を考える。す 2 2023/01/10 21:08
- PHP 配列の値の更新方法について 1 2022/08/05 09:49
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
VBAのコンボボックスの年月表示...
-
この曲はなんでしょう?
-
ダウンロードしたデジブックはa...
-
画像表示をアルファでフェード...
-
laptop go2からの買い替え、lap...
-
iframe インラインフレームにつ...
-
スクリップト
-
私のコンピューター上のファイ...
-
arduino プログラムについて
-
chrome flash
-
FLASHの再生はできないのでしょ...
-
フラッシュゲームアーカイブ2
-
ウェブサイトで Flash が事実上...
-
Flashコンテンツを使ったWebサイト
-
Flash Playerのサポートが終了
-
Form内のselectを連動させるに...
-
Flashをブロックしないで
-
ad or script について
-
Flashplayerの運用について
-
Adobe Flash Player
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
ActionScript3.0によるPHPへの...
-
変数名を分割したり結合する方法
-
サムネイルの写真にリンクをつ...
-
マウスの基準点について
-
loaderでflashを読み込んだ際の...
-
配列をソートしたいです
-
XML内のタグの内容を、変数に出...
-
csv読込
-
エラー(型が一致しません。)...
-
VB6でユーザー定義型がNothing...
-
VB.NET の配列の要素数
-
TextChangeイベントが発生しない
-
python: 直角三角形の種類を求...
-
配列の要素番号を取得するには?
-
#define 文
-
c++ cmathとmath.h
-
VBでボタンを押すと画像をラン...
-
重複しない乱数整数を発生させる。
-
ifdefとenum
-
LRESULTとHRESULT
おすすめ情報