適当に 5,1,3,2,4,6 と書かれたテキストがあるとして、
これらの数字を大きい順に並べかえるにはどう
記述すればいいか教えていただけないでしょうか?
もともとの並びから任意の数字を参照するところまでは
わかりました。よろしくお願いします。
================================================================
loadLV = new LoadVars(); //LoadVarsオブジェクトを作成
ranking=Array //配列を用意
loadLV.onData = function(data){
ranking = data.split(","); //コンマ区切りでデータを配列
trace("「" + ranking[0] + "」"); //5が出力されます
};
loadLV.load("ranking.txt"); //テキストの読み込み
No.1
- 回答日時:
ranking=ranking.sort(Array.NUMERIC);
これで
数字の場合はsortは引数にオプション入れないと
文字列として頭の字で判断しちゃうので
一桁なら問題ないですが2桁以上だと
NUMERIC指定しないとだめです
この回答への補足
ranking=ranking.sort(Array.NUMERIC);
はどこに記述すればよいのでしょうか?
テキストの数字を 52,11,31,21,4,198 として
スクリプトを以下のようにしたところ、案の定
頭の数字が大きい52が一番大きいと判断されて
しまいました。
===============================================================
loadLV = new LoadVars(); //LoadVarsオブジェクトを作成
ranking=Array //配列を用意
loadLV.onData = function(data){
ranking = data.split(","); //コンマ区切りでデータを配列
ranking.sortOn(Array.NUMERIC); // ←ここに記述
trace("「" + ranking[5] + "」"); //5が出力されます
};
loadLV.load("ranking.txt"); //テキストの読み込み
No.2
- 回答日時:
何のプログラミング言語を使っているのか分かりませんが、参考になりそうなURLをいくつか。
「ソート」でGoogle検索してみたらWikipediaに載ってるものが良さそうだったので載せておきます。見れば分かりますが、遅くてもいいならバブルソートが一番簡単です。http://ja.wikipedia.org/wiki/Category:%E3%82%BD% …
http://jyoken.net/2005/kenpatsu/enari_oraf/
No.3
- 回答日時:
#1です
ranking.sortOn(Array.NUMERIC);
↓
ranking=ranking.sort(Array.NUMERIC);
sortOnはオブジェクトの配列を
並べ替えるためのもので
sortとは別物です
また、sort()は元の配列は変更せず結果を返します
Arrayのメソッドは大体、削除や挿入は元の配列を変更し
結合や並び替えは元の配列は変更せずに結果を返します
お返事ありがとうございます。
ranking=ranking.sort(Array.NUMERIC);
と書いても頭の数字で判断されるので
違う書き方を試している途中のスクリプト
を載せていました。
結局のところ、どちらで書いても効果が
なかったので引き続きアドバイスいただけれ
ばと思います。
==============【現状のスクリプト】========================
テキストの内容 52,11,31,21,4,198
loadLV = new LoadVars(); //LoadVarsオブジェクトを作成
ranking=Array //配列を用意
loadLV.onData = function(data){
ranking = data.split(","); //コンマ区切りでデータを配列
ranking=ranking.sort(Array.NUMERIC); // ←ここに記述
trace("「" + ranking[5] + "」"); //52が出力されます
};
loadLV.load("ranking.txt"); //テキストの読み込み
No.4ベストアンサー
- 回答日時:
外部テキストファイルから読み込んだ情報は文字列として扱われます。
従って、読み込んだ文字列を split で分割して配列変数に格納した場合も、数値ではなく文字列になっています。
sort および sortOn メソッドは、ソート対象が文字列か数値かに関係なく、デフォルトでは「文字コードの順に」「昇順」のソートになっています。
対象が数値であれば、条件に NUMERIC フラグ( Array.NUMERIC )を指定すると数値の大小でソートされるようになります。
しかし、対象がそもそも文字列の場合は、NUMERIC フラグを指定しても無視されてしまいます。
今回の件ですと、split で分割した後は文字列になっていますから、まずはこれを数値に変換する必要があります。
文字列を数値に変換するには、Number という関数を使います。
スクリプトの一例です。
onData = function の部分を、次のように変更してみてください。
(↓各行頭に全角のスペースが入っています。コピーする際は、全て半角のスペースかタブに置き換えてください)
/*************************************************/
loadLV.onData = function(data)
{
var i;
//読み込んだ文字列を”,”で分割して配列変数に格納
ranking = new Array();
ranking = data.split( "," );
//配列変数内の文字列を数値に変換
for( i = 0 ; i < ranking.length ; i++ )
{
ranking[ i ] = Number( ranking[ i ] );
}
//数値の大小で昇順にソート
ranking.sort( Array.NUMERIC );
//チェック
for( i = 0 ; i < ranking.length ; i++ )
{
trace( "ranking[ " + i + " ] = " + ranking[ i ] );
}
};
/*************************************************/
sort と sortOn の違いは、フィールドという概念を使ってソートの条件を指定するかどうかです。
ActionScript の配列変数は、
ranking[ 0 ] = { score : 198 , lv : 5 , name : "AAA" };
このように仕切りを作り、同じ ranking[ 0 ] という名前で [ 0 ].score ・ [ 0 ].lv ・ [ 0 ].name という3つの情報を管理できるようになっています。
sortOn を使うと、特定の仕切り(フィールドといいます)のデータに注目してソートすることができます。
例えば score の値をもとに数値の大小で昇順に並べ替えたい時は、
ranking.sortOn( "score" , Array.NUMERIC );
というように使います。
Flash Player 8 以降は、score に関しては昇順、lv に関しては降順で、といった、複数のフィールドに対して複雑な条件を指定することもできます。
なお、sort および sortOn は一部の条件でのソートを除き、元の配列変数そのものを並べ替えるだけで、値を返しません。つまり、基本的には、元の配列変数はソート後の状態に変更されます。
元の配列変数を書き換えたくない場合は、並び替えた後の並び順が入った別の配列変数が返ってくる” Array.RETURNINDEXEDARRAY ”という条件を指定します。
できました!ありがとうございます。
では逆に、何番目の数値が一番大きいかを調べたり
も可能なのでしょうか?(5つ数字が並んでいたら、0~4のどれか
が出力されるようなスクリプト)
No.5
- 回答日時:
#1です
間違ったこと言ってましたねスイマセン
でも一応結果は返してくれるようです
(実はヘルプでは返さないって
書いてるんですがしっかり返してくれます)
reverse含め並べ変えのメソッドは
元の配列を変更します
しないのはsliceとconcatぐらいですね
>>何番目の数値が一番大きいかを調べたり
そこがまさに#4さんの言われてる
Array.RETURNINDEXEDARRAYの出番です
trace(arr.sort(2||8||16)[0])
オプションの長ったらしいArray.RETURNINDEXEDARRAYとか
Array.NUMERICの正体は実はただの数字です
3つもあるとさすがに面倒いので数字にしました
2は降順で並べる、16は数字として扱う指定
そして8がArray.RETURNINDEXEDARRAY
『元の何番目のものがそこにはいるのかを
ならべた配列を返す指定』です
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- その他(Microsoft Office) Excel 2列分のDATAの並べ替え 1 2023/01/01 17:12
- Ruby 初心者プログラミング 3 2022/10/12 11:31
- C言語・C++・C# pythonのファイルの並びでの読み込みとリストについて 4 2022/04/13 03:52
- C言語・C++・C# c言語の問題です 課題1 (二分探索木とセット) 大きさ size の配列 array を考える。す 2 2023/01/10 21:08
- C言語・C++・C# C#テキストボックスの文字を配列にいれてその後表示する 4 2022/07/17 04:47
- Excel(エクセル) Googleスプレッドシートの割合の関数と円グラフの並べ替えについて 1 2022/07/22 17:31
- Excel(エクセル) 結合セルのソートについて 5 2022/04/22 11:57
- その他(プログラミング・Web制作) プログラミング python pandas 固定長データの出力 2 2022/08/16 11:22
- C言語・C++・C# C言語プログラム変更 2 2022/12/21 15:03
- その他(プログラミング・Web制作) 2つのテキストファイルを比べて文字列を特定する方法を教えて下さい 5 2022/05/01 15:22
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
flash (.swf) を編集したい
-
Giam
-
Flashでランダムクイズゲームを...
-
AS3 mc0~5をまとめて処理する
-
この曲はなんでしょう?
-
laptop go2からの買い替え、lap...
-
スクリップト
-
私のコンピューター上のファイ...
-
arduino プログラムについて
-
chrome flash
-
FLASHの再生はできないのでしょ...
-
フラッシュゲームアーカイブ2
-
ウェブサイトで Flash が事実上...
-
Flashコンテンツを使ったWebサイト
-
Flash Playerのサポートが終了
-
Form内のselectを連動させるに...
-
Flashをブロックしないで
-
ダウンロードしたデジブックはa...
-
ad or script について
-
Flashplayerの運用について
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
VB.NET の配列の要素数
-
配列の要素番号を取得するには?
-
VBでボタンを押すと画像をラン...
-
重複しない乱数整数を発生させる。
-
変な質問ですみません、n番目の...
-
DataGridでCTRLキーを押さずに...
-
複数の変数宣言を、for文で一気...
-
VB6 複数行のテキストをリスト...
-
ランダムに数字を並び変える方法は
-
Vba 配列の中の特定文字列の位...
-
IDの自動採番について
-
[Objective-c]多次元配列のアク...
-
Flashでお絵描きアプリを作って...
-
ランダムに6つの数字を選びその...
-
【ActionScript】配列の昇順降...
-
画像をランダムに表示するには
-
【数字ランダム】計算問題ラン...
-
FlashソフトSuzukaで、トランプ...
-
ランダム表示を重複させないよ...
-
Flashでランダムクイズゲームを...
おすすめ情報