ActionScript初心者ですが、宜しければご回答お願いします。
下記スクリプトではtsizeの配列の値のインデックスを比較し、
戻り値として -1 1 0 を得る事ができるのですが、
-1 1 0 の戻り値を処理する工程がわかりません。
trace(alist.sort(tSort));
上記tSort部分に直接 0 や -1 を記入するとエラーになります。
-1 1 0 の戻り値がどのように処理されているのか教えて頂けませんでしょうか?
よろしくお願いします。
var tsize:Array = new Array("SS","S","M","L","LL","XL");
function tSort(a:String, b:String):int {
//配列での位置を調べる
var indexa:int = tsize.indexOf(a);
var indexb:int = tsize.indexOf(b);
if (indexa<indexb) {
return -1;
} else if (indexa>indexb) {
return 1;
} else {
return 0;
}
}
var alist:Array = new Array("LL","M","XL","S","L","SS","M","S");
trace(alist.sort(tSort));
A 回答 (1件)
- 最新から表示
- 回答順に表示
No.1
- 回答日時:
まず,
書かれていらっしゃるスクリプトをもっと単純化して,
どういう動きをしているのかを観察してみます。
-----------------------
function mySort(A,B):int {
trace(A,B);
return ★;
}
var myArr=new Array("要素0","要素1","要素2","要素3","要素4");
trace(myArr.sort(mySort));
-----------------------
↑これを見ます。
★=0 の場合
----------------------------------
function mySort(A,B):int {
trace(A,B);
return 0;
}
var myArr=new Array("要素0","要素1","要素2","要素3","要素4");
trace(myArr.sort(mySort));
//---↓出力↓---
//要素1 要素2
//要素0 要素2
//要素3 要素2
//要素4 要素2
//要素4 要素2
//要素3 要素2
//要素0 要素2
//要素1 要素2
//要素2,要素1,要素0,要素3,要素4
----------------------------------
★=1 の場合
----------------------------------
function mySort(A,B):int {
trace(A,B);
return 1;
}
var myArr=new Array("要素0","要素1","要素2","要素3","要素4");
trace(myArr.sort(mySort));
//---↓出力↓---
//要素1 要素2
//要素4 要素2
//要素3 要素2
//要素0 要素2
//要素1 要素2
//要素0 要素3
//要素4 要素3
//要素1 要素3
//要素0 要素3
//要素0 要素1
//要素0 要素4
//要素1 要素4
//要素2,要素3,要素4,要素1,要素0
----------------------------------
★=-1 の場合
----------------------------------
function mySort(A,B):int {
trace(A,B);
return -1;
}
var myArr=new Array("要素0","要素1","要素2","要素3","要素4");
trace(myArr.sort(mySort));
//---↓出力↓---
//要素1 要素2
//要素0 要素2
//要素3 要素2
//要素4 要素2
//要素4 要素2
//要素1 要素0
//要素4 要素0
//要素3 要素0
//要素3 要素0
//要素3 要素1
//要素1 要素4
//要素3,要素1,要素4,要素0,要素2
----------------------------------
★の値によって,演算回数は増減しますが,
mySort(A,B) の A と B には,
少なくとも,どれかの要素(真ん中の要素) を軸とした
総当たりの要素ペア が入ることがわかります。
どれかの要素(真ん中の要素) とは上の場合,
myArr[2] = 要素2 です。
その他色々やってみると,
要素数が偶数の場合,どれかの要素(真ん中の要素) は,
後半の1つ目になることがわかります。
細かいことはFlashのソートアルゴリズム自体に関わることなので,
おそらく意識しなくて良いことだと思います。
mySort(A,B) の A と B には,
ほぼ総当たりで 要素のペア が入る
ということだけを意識すれば良いと思います。
というわけで,
以上のことを意識してご質問のスクリプトにコメント行を1行ずつ加えると次のようになります。
-------------------------------------------------
// データの順を示す配列 tsize を作成
var tsize:Array=new Array("SS","S","M","L","LL","XL");
//関数tSortの定義(引数:alist[*]要素,alist[*以外]要素)戻り値:整数
function tSort(a:String, b:String):int {
// tsize における alist[*]要素 の順番を調べる
var indexa:int=tsize.indexOf(a);
// tsize における alist[*以外]要素 の順番を調べる
var indexb:int=tsize.indexOf(b);
// alist[*]要素 の順が alist[*以外]要素 の順より小さい時
if (indexa<indexb) {
// alist[*]要素 を alist[*以外]要素 より前にソート
return -1;
// alist[*]要素 の順が alist[*以外]要素 の順より大きい時
} else if (indexa>indexb) {
// alist[*]要素 を alist[*以外]要素 より後にソート
return 1;
// alist[*]要素 の順が alist[*以外]要素 の順と同じ時
} else {
// ソートをしない
return 0;
}
}
// 順を並べかえるデータ配列 alist の作成
var alist:Array=new Array("LL","M","XL","S","L","SS","M","S");
// alist の要素をソート(引数:関数tSort)
trace(alist.sort(tSort));
-------------------------------------------------
だいたい以上のような感じ意味になると思います。
全体的な流れは,
「Array.sort(引数)
の 引数 部分に関数をいれておけば,
その関数に Arrey の2要素ずつが渡されて,
sort処理の途中で細かい指示ができる。」
というものです。
=== 以下はどうでも良い補足です ======
実行する内容は全く違いますが,
全体的には次のような流れ(やりとり)になっていると思います(コピペで動作可能)。
----------------------------------------------
// 擬似Flash側関数(引数:関数)戻り値:文字列
function flashFunc(A:Function):String {
if (A("男性ですか?")=="はい") {
return "ようこそ。男風呂をゆっくりお楽しみください。";
} else if (A("男性ですか?")=="いいえ") {
return "ここは男風呂です。女風呂へ行ってくださいね。";
} else if (A("女性ですか?")=="はい") {
return "ようこそ。女風呂をゆっくりお楽しみください。";
} else if (A("女性ですか?")=="いいえ") {
return "ここは女風呂です。男風呂へ行ってください!";
}
return "申し訳ありませんがオカマの方は御遠慮ください。";
}
//---↑以上はFlash側で本来見えないとする↑---
//---↓以下はユーザ側で見えるものとする↓---
// 「男性ですか?」という問いに「いいえ」を返す関数を定義
// カスタム関数(引数:文字列) 戻り値:文字列
function myFunc(Q:String):String {
if (Q=="男性ですか?") {
return "いいえ";
}
return null;
}
// カスタム関数を引数として擬似Flash側関数を呼び出し
// その戻り値を出力
trace(flashFunc(myFunc));
----------------------------------------------
妙な例ですみません...。
ソートのイメージ図
とても解り易くご回答して頂き有難う御座います。
初心者の自分ではここまで明確に答えを出すことができませんでした。
コメント並びに例題、Img図のお蔭でスッキリする事ができました。
解らないプログラムがあった場合、
BlurFiltanさんの回答手順を参考にさせてもらおうと思います。
それから「function flashFunc」につきまして、
いつも思うのですが、
「おかま」は題材になるのに、「おなべ」はあまり出てこないですね。
ActionScriptを使いこなせるように精進します。
有難う御座いました。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
関連するカテゴリからQ&Aを探す
おすすめ情報
- ・漫画をレンタルでお得に読める!
- ・街中で見かけて「グッときた人」の思い出
- ・「一気に最後まで読んだ」本、教えて下さい!
- ・幼稚園時代「何組」でしたか?
- ・激凹みから立ち直る方法
- ・1つだけ過去を変えられるとしたら?
- ・【あるあるbot連動企画】あるあるbotに投稿したけど採用されなかったあるある募集
- ・【あるあるbot連動企画】フォロワー20万人のアカウントであなたのあるあるを披露してみませんか?
- ・映画のエンドロール観る派?観ない派?
- ・海外旅行から帰ってきたら、まず何を食べる?
- ・誕生日にもらった意外なもの
- ・天使と悪魔選手権
- ・ちょっと先の未来クイズ第2問
- ・【大喜利】【投稿~9/7】 ロボットの住む世界で流行ってる罰ゲームとは?
- ・推しミネラルウォーターはありますか?
- ・都道府県穴埋めゲーム
- ・この人頭いいなと思ったエピソード
- ・準・究極の選択
- ・ゆるやかでぃべーと タイムマシンを破壊すべきか。
- ・歩いた自慢大会
- ・許せない心理テスト
- ・字面がカッコいい英単語
- ・これ何て呼びますか Part2
- ・人生で一番思い出に残ってる靴
- ・ゆるやかでぃべーと すべての高校生はアルバイトをするべきだ。
- ・初めて自分の家と他人の家が違う、と意識した時
- ・単二電池
- ・チョコミントアイス
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
ウディタで作ったゲームを公開...
-
uwscでExcelに自動記入
-
FLASH MX で作成した、flashやA...
-
Flash Playerのサポートが終了
-
Flash対応のサイトが表示されない
-
Flashのウィンドウの設定は簡単...
-
ActionScript3.0で画面を揺らす...
-
FlashBuilder4からデータベース...
-
FLASHでゲームを作っていた人は...
-
この曲はなんでしょう?
-
laptop go2からの買い替え、lap...
-
スクリップト
-
私のコンピューター上のファイ...
-
arduino プログラムについて
-
chrome flash
-
FLASHの再生はできないのでしょ...
-
フラッシュゲームアーカイブ2
-
ウェブサイトで Flash が事実上...
-
Flashコンテンツを使ったWebサイト
-
Form内のselectを連動させるに...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
配列の要素番号を取得するには?
-
変な質問ですみません、n番目の...
-
VB.NET の配列の要素数
-
DataGridでCTRLキーを押さずに...
-
IDの自動採番について
-
VB6 複数行のテキストをリスト...
-
Vba 配列の中の特定文字列の位...
-
[Objective-c]多次元配列のアク...
-
重複しない乱数整数を発生させる。
-
VBでボタンを押すと画像をラン...
-
ヒープソートの問題について
-
重複しない乱数を作り配列に入...
-
ランダムに数字を並び変える方法は
-
重複しない乱数の生成
-
画像を横に無限スクロールする件で
-
ActionScriptで配列をクリアす...
-
構造体配列のサイズ
-
簡単な当たり判定作りたい
-
複数の異なる結果を表示するラ...
-
FLASHでXMLを読み込んだときに...
おすすめ情報