get().sort(function() {
return Math.round(Math.random()) - 0.5;
})
はどういう意味ですか? ソートを
return Math.round(Math.random()) - 0.5;
でするようですが、
ランダムな数字を出してどうやってソートされるのですか?
ソートは文字でか数値ででないのですか?
http://memopad.bitter.jp/w3c/jsref/jsref_sort.html
では
>フォルトで、要素をアルファベットの昇順にソートします。 しかし、数値が正しくソートされません(40が5の前に来ます)。 数値をソートするためには、数を比較する関数を追加しなければなりません。
となっています。
ランダムな数字でソートはできるのですか? 使う意味を教えて下さい。
それから、-0.5をしてるのはどういう意味でしょうか?
No.5ベストアンサー
- 回答日時:
こんにちは。
=====================
>正または負の値を返すことによって並び替える順序を決めます。
ということは、
0,1,2,3
という数字があれば、
0,1,2,3か
3,2,1,0の2つの並び替えだけできるということですか?
>ランダムにソート
>シャッフルするイメージ
からは、
2,3,1,0や0,3,1,2などもなる感じがしますが、そうではなく、降順・昇順の2つしか指定できないのでしょうか?
=====================
2つの並びになるのではなく、比較対象の2値を並び替える種類が2つ(正と負)あるということです。
ある2値(a,b)を対象にreturn -0.5;と負の値が返ってきた場合は、aの値をbより小さい添え字にします。
https://developer.mozilla.org/ja/docs/Web/JavaSc …
ここを参考にしてみてください。
aとbのなぞも解けます。
array.sort(compareFunction);
No.3
- 回答日時:
>ランダムな数字を出してどうやってソートされるのですか?
Math.random()は0~1(1を含まない)乱数を返しますので、値の大小の評価を確率1/2で行なっていると考えられます。
sortのロジックがどのような方法で行なっているのかは知りませんが、構成する各要素の比較の際に大小を半々の確率で評価するということです。
想像するところ、配列のシャッフルの代用として使おうとしているのではないでしょうか?
試しに、
d = [1, 2, 3, 4, 5].sort(function(){
return Math.round(Math.random()) - 0.5;
});
として数百回のシャッフル度合いを見てみると、
[ 4, 2, 5, 3, 1 ]
[ 4, 5, 1, 2, 3 ]
[ 2, 4, 3, 5, 1 ]
[ 2, 4, 3, 5, 1 ]
[ 1, 4, 5, 2, 3 ]
[ 3, 5, 4, 2, 1 ]
[ 3, 4, 5, 1, 2 ]
・・・・
・・・・
のようになりますが、これを集計してみると以下のようになりました。
| 1桁目 | 2桁目 | 3桁目 | 4桁目 | 5桁目
---------------------------------------------------
値1の出現率 | 0.14 | 0.13 | 0.09 | 0.13 | 0.51
値2の出現率 | 0.20 | 0.22 | 0.16 | 0.32 | 0.10
値3の出現率 | 0.20 | 0.21 | 0.17 | 0.14 | 0.28
値4の出現率 | 0.30 | 0.21 | 0.38 | 0.05 | 0.06
値5の出現率 | 0.16 | 0.23 | 0.20 | 0.36 | 0.05
きれいににシャッフルされていれば出現率はどれも0.2に近くなるはずですが、どうやらだいぶ偏りがあるように思えます。
(百回ずつ分割して集計しましたが、同じ傾向にあるので…
5桁目の1の出現率は高く、5の出現率は低いなど)
No.2
- 回答日時:
配列を適当に並び替える処理ですね。
シャッフルとかランダムソートとか呼ばれる処理です。
文字列比較の昇順で並び替え
list.sort();
数値比較の昇順で並び替え
list.sort(function(a,b){ return a-b }); // aが小さければ負数を返す
数値比較の降順で並び替え
list.sort(function(a,b){ return -(a-b) }); // aが小さければ正数を返す
何も比較せずに適当な順番に並び替え
list.sort(function(a,b){ return Math.random() - 0.5 }); // 適当に負数か正数を返す
ただしこの処理ではランダム性に問題があるようで、並び替え結果がかなり偏ってしまいます。
処理性能や簡便性が魅力ではありますが、使用する際はご注意ください。
この回答への補足
http://memopad.bitter.jp/w3c/jsref/jsref_sort.html
では、降順と昇順だけ載っていますが、なぜ適当な順番に並び替えられますか?
>何も比較せずに適当な順番に並び替え
>list.sort(function(a,b){ return Math.random() - 0.5 }); // 適当に負数か正数を返す
の部分がよく理解できないのですが、どうしてこれでランダムな並び替えになりますか?
勉強不足ですみません。疑っているわけではなく、実際にランダムになるんですが、その理由が知りたいんです。
URL先にも載っていましたが、a-bというのはどこから出てきたものでしょうか?
aとbにはどういった値が入っていますか?
何も入ってないようなのですが、なぜaとbを使いますか?
No.1
- 回答日時:
こんにちは。
sortは正または負の値を返すことによって並び替える順序を決めます。
(0だと上下の関係性が無し)
なのでこれを実行すると配列内がランダムにソートされます。
ようするに配列内をシャッフルするイメージです。
0.5引いているのは、戻り値として正の値か負の値が欲しいからです。
Math.roundしているのでランダムの値は0か1が取得されます。
そこから0.5を引けば0.5か-0.5の正か負の値となります。
なので0.5を引いています。
この回答への補足
>正または負の値を返すことによって並び替える順序を決めます。
ということは、
0,1,2,3
という数字があれば、
0,1,2,3か
3,2,1,0の2つの並び替えだけできるということですか?
>ランダムにソート
>シャッフルするイメージ
からは、
2,3,1,0や0,3,1,2などもなる感じがしますが、そうではなく、降順・昇順の2つしか指定できないのでしょうか?
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Visual Basic(VBA) Excel VBAで並べ替えをしたい 3 2023/02/25 09:31
- Excel(エクセル) Excelの50音順ソートを全ての行列に適用するには? 4 2022/12/05 11:28
- Excel(エクセル) 結合セルのソートについて 5 2022/04/22 11:57
- Java Java配列の問題を教えてください。 乱数で20個出力し、最大、最小、合計、平均を求め、更に昇順にソ 3 2023/07/10 18:32
- C言語・C++・C# 10個の実数に対する降順ソート結果を出力するプログラムを作りたいのですが、写真のプログラムをどう直せ 2 2022/07/09 21:13
- Excel(エクセル) Excelのソート(並べ替え) 2 2022/05/15 22:54
- Excel(エクセル) Excel 効率的な名簿と得点の管理の仕方 8 2022/08/07 08:15
- Excel(エクセル) 重複しているか否かをソートせずに判断する方法ありますか? 2 2022/07/06 21:16
- その他(プログラミング・Web制作) sortの優先キーについて(スプレッドシート) 1 2023/01/17 17:59
- C言語・C++・C# 10個の実数に対する降順ソート結果を出力するプログラムを作りたいのですが、以下のプログラムをどう直せ 1 2022/07/09 22:16
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
同じIDで定義した要素の配列を...
-
C#テキストボックスの文字を配...
-
助けてください‼︎ javascriptで...
-
ソートで
-
jspからjavascriptの変数引継ぎ
-
JavaScriptにおける[] とか :...
-
順列生成アルゴリズムについて...
-
配列を作って総当たりで距離を...
-
どうすればresponseText結果を...
-
undefinedを表示させない方法は...
-
ActiveXobjectが作成できない
-
関数でy=g(x)のgとは何の略です...
-
<a>タグのテキストを取得
-
ローカルにあるファイルを検索...
-
window.openでタイトル名の指定
-
functionから別のfunctionを実...
-
document.onkeydownについて
-
idを使わずにonclickで自身の要...
-
googleスプレッドシートのApps ...
-
C#OpenCv V4にのエラーに関する...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
同じIDで定義した要素の配列を...
-
C#テキストボックスの文字を配...
-
jspからjavascriptの変数引継ぎ
-
javascript 変数名の連結をしたい
-
二次元配列を使って順位をだす...
-
javascriptで行を抽出したいです。
-
javascriptからphpに配列データ...
-
多次元配列から最大値を1行また...
-
Perlの配列をJavaScriptに渡せ...
-
JSONデータを50音順でソートしたい
-
どうすればresponseText結果を...
-
バナーのランダム表示(複数、...
-
JavaScriptでの動的な多次元配...
-
JavaScriptからPHPに配列を渡す...
-
javascript 省略した記述と思わ...
-
【Google Apps Script】コード...
-
javascriptを用いて作成された...
-
[JS] setAttributeで保存される...
-
javascriptで2つのArrayの...
-
配列について、その要素を並べ...
おすすめ情報