数値配列のシャッフル


投稿ツリー



前の投稿 - 次の投稿 | 親投稿 - 子投稿.1 .2 .3 | 投稿日時 2012/8/29 13:03
Donut 
uint max;
uint[] values;

このような配列に、0~maxまでの値が重複なく存在しています。
ちなみに、初期化時には[0,1,2,3,4,...max]という感じで、規則正しく並んでいます。

この配列の中身を、なるべく偏りないようにかき混ぜるというか、シャッフルしたいのですが、どのように実現すればよいのか分かりません。

よい方法ご存じでしたらお助けくださいまし
よろしくお願い致します。
投票数:7 平均点:5.71
返信する
前の投稿 - 次の投稿 | 親投稿 - 子投稿なし | 投稿日時 2012/8/29 22:19
SHOO  管理人   投稿数: 658
これでいかがでしょう

#code(d){{{
import std.stdio, std.random, std.algorithm;

T[] shuffleInPlace(T)(T[] values)
{
foreach (i; 0..values.length)
{
values[i].swap(values[uniform(0, values.length)]);
}
return values;
}

void main()
{
uint max = 100;
uint[] values;
foreach (i; 0..max+1)
{
values ~= i;
}
writeln(values.shuffleInPlace());
}
}}}
(Range対応は諦めた…)
投票数:9 平均点:5.56
返信する
前の投稿 - 次の投稿 | 親投稿 - 子投稿なし | 投稿日時 2012/8/30 15:10
ゲスト 
import std.stdio;
import std.random;

void main() {
auto a = [0, 1, 2, 3, 4];

randomShuffle(a);

writeln(a);
}
投票数:8 平均点:5.00
返信する
前の投稿 - 次の投稿 | 親投稿 - 子投稿なし | 投稿日時 2012/9/1 6:59
Donut 
SHOOさん、ゲストさん
返信ありがとうございます。

お陰様で、どうにか解決できそうです。

ありがとうございました。
投票数:6 平均点:3.33
返信する

このトピックに投稿する

題名
ゲスト名
投稿本文

  条件検索へ


メインメニュー

ログイン

ユーザー名:


パスワード:





パスワード紛失  |新規登録

Menu