エクセルのように
A列は降順
B列は昇順
のような並べ替えをしたいのです
ちなみに
Arr[0]=({key1 : 5 , key2 : 50 , key3 : "あいう"})
Arr[1]=({key1 : 4 , key2 : 60 , key3 : "えおか"})
Arr[2]=({key1 : 5 , key2 : 70 , key3 : "きくけ"})
Arr[3]=({key1 : 4 , key2 : 80 , key3 : "こさし"})
Arr[4]=({key1 : 3 , key2 : 50 , key3 : "すせそ"})
Arr[5]=({key1 : 2 , key2 : 60 , key3 : "たちつ"})
Arr[6]=({key1 : 5 , key2 : 60 , key3 : "こさし"})
Arr[7]=({key1 : 4 , key2 : 30 , key3 : "すせそ"})
Arr[8]=({key1 : 2 , key2 : 30 , key3 : "たちつ"})
となっているものを
key1に関して降順 key2に関して昇順 としたいのです
自分がやったこととして
Arr.sortOn("key1" , 18)
Arr.sortOn("key2" , 16)
と順番に書きました
その結果 Arr.sortOn("key2" , 16)
には なっているのですが
Arr.sortOn("key1" , 18) は
全く無視される状態でした
解決策はありませんか?
No.2ベストアンサー
- 回答日時:
sortOn を実行すると、デフォルトでは元の配列も並び替えられます。
Arr.sortON( "key1" , 18 );
で key1 のデータを降順にして Arr を並べ替えたあとで、
Arr.sortOn( "key2" , 16 );
を実行すると、key2 のデータを元に Arr が再度並べ替えられます。
つまり、最終的に Arr は、Arr.sortOn( "key2" , 16 ); で並べ替えられた状態になります。
sortOn の第2引数で渡すフラグに、Array.RETURNINDEXEDARRAY ( = 8 )があります。
これを渡すと、Arr を並べ替えずに、並べ替えた内容だけを利用することが可能になります。
ただし、戻ってくるのは、並べ替えたあとのインデックス番号です。
例えば、配列に
Arr[0].key1 = 1;
Arr[1].key1 = 3;
Arr[2].key1 = 2;
Arr[3].key1 = 4;
このようなデータが入っているとします。
k1 = new Array();
k1 = Arr.sortON( "key1" , Array.NUMERIC | Array.RETURNINDEXEDARRAY );
を実行すると、配列 k1 の内容は
k1[0] = 0;
k1[1] = 2;
k1[2] = 1;
k1[3] = 3;
になります。
Arr の key1 を昇順に並べ替えた時、そのインデックス番号に注目しますと、0→2→1→3となります。この結果が k1 に入っています。
しかし、Arr 自体は変更されていません。
従って、k1 の内容を利用して
for( i = 0 ; i < Arr.length ; i++ )
{
trace( Arr[ k1[ i ] ].key1 );
}
とすると、key1 を昇順に並び替えた状態の Arr の内容を表示できます。
処理のイメージとしては、元のデータは一切触らずに、並べ替えた状態のリンク情報だけを用意して、必要な時にその情報を見ながら一時的に並べ替えているように見せかける、といったところでしょうか。
同じ要領で key2 を降順に並び替えた k2 という配列を用意しておくと、key2 を元に降順で並び替えた状態を随時表示できます。
降順に並び替え、そのインデックス値を返すようにするには、sortOn の第2引数に
Array.DESCENDING | Array.NUMERIC | Array.RETURNINDEXEDARRAY
を指定します。定数を元にビット演算しますと、26 になります。
ちなみに、昇順に並び替えたあとのインデックス値を取得する場合は 24 です。
No.3
- 回答日時:
No.1です。
ん?質問の意味を取り違えていましたか。
key1でソートしてkey2でソートするんですよね。で、key2が同じになっている配列はkey1順に並べたいのですよね。そしたら、key1順に並ばないという風に受け取ったので、たぶんクイックソートみたいな安定ではない(キーの等しいもの同士の順序関係が崩れる)ソート方法を使っているのだと想像したのですが。
2種類の並べ方を選ぶだけでいいのなら別の変数名で配列を増やせば済むような気がします。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
関連するカテゴリからQ&Aを探す
おすすめ情報
- ・漫画をレンタルでお得に読める!
- ・14歳の自分に衝撃の事実を告げてください
- ・架空の映画のネタバレレビュー
- ・「お昼の放送」の思い出
- ・昨日見た夢を教えて下さい
- ・ちょっと先の未来クイズ第4問
- ・【大喜利】【投稿~10/21(月)】買ったばかりの自転車を分解してひと言
- ・メモのコツを教えてください!
- ・CDの保有枚数を教えてください
- ・ホテルを選ぶとき、これだけは譲れない条件TOP3は?
- ・家・車以外で、人生で一番奮発した買い物
- ・人生最悪の忘れ物
- ・【コナン30周年】嘘でしょ!?と思った○○周年を教えて【ハルヒ20周年】
- ・ハマっている「お菓子」を教えて!
- ・最近、いつ泣きましたか?
- ・夏が終わったと感じる瞬間って、どんな時?
- ・10秒目をつむったら…
- ・人生のプチ美学を教えてください!!
- ・あなたの習慣について教えてください!!
- ・牛、豚、鶏、どれか一つ食べられなくなるとしたら?
- ・都道府県穴埋めゲーム
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
ウディタで作ったゲームを公開...
-
uwscでExcelに自動記入
-
ゲオでカードを作るのは何歳か...
-
拡張子「swf」の再生方法について
-
アニメの「.fmd」をgif形式に変...
-
iPad、iPhoneでフラッシュムー...
-
アクションスクリプト2.0 奇数...
-
FLASHでゲームを作っていた人は...
-
この曲はなんでしょう?
-
laptop go2からの買い替え、lap...
-
スクリップト
-
私のコンピューター上のファイ...
-
arduino プログラムについて
-
chrome flash
-
FLASHの再生はできないのでしょ...
-
フラッシュゲームアーカイブ2
-
ウェブサイトで Flash が事実上...
-
Flashコンテンツを使ったWebサイト
-
Flash Playerのサポートが終了
-
Form内のselectを連動させるに...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
重複しない乱数の生成
-
配列の要素番号を取得するには?
-
VB.NET の配列の要素数
-
変な質問ですみません、n番目の...
-
VB6 複数行のテキストをリスト...
-
ActionScriptで配列をクリアす...
-
C言語のsizeof(サイズオブ)演算...
-
VBでボタンを押すと画像をラン...
-
重複しない乱数整数を発生させる。
-
複数の異なる結果を表示するラ...
-
ランダム表示を重複させないよ...
-
文章の改行数を取得する
-
[Objective-c]多次元配列のアク...
-
AS3.0 二次元配列でムービーク...
-
ランダムに6つの数字を選びその...
-
簡単な当たり判定作りたい
-
DataGridでCTRLキーを押さずに...
-
【ActionScript】配列の昇順降...
-
文字列にある数字を判別するに...
-
Vba 配列の中の特定文字列の位...
おすすめ情報