質問
私は、ランダムな順序で1-> 36から144の数(したがって、各数値は、4回繰り返される)を有するアレイを生成します。我々はそれを行うためにEnumerable.RepeatとEnumerable.Rangeを使用することができます。はい場合は、どのように私に説明してくださいよりも?
解決
まあ、すべての数字ででシーケンスを作成するのは簡単です。
var items = from x in Enumerable.Range(1, 36)
from y in Enumerable.Repeat(x, 4)
select y;
次に、あなただけの配列にそれを取得し、それをシャッフルするToArray
を使用することができます。このようこの1 のようSO上でC#で配列をシャッフルについて、多くの質問があります。あなたが直接そのコードを使用する、またはToArray
を呼び出し、最後にそれを得ない場所で配列をシャッフルする可能性のいずれか。
他のヒント
int[] numbers = Enumerable.Range(0, 144).Select(i => (i % 36)+1).OrderBy(g => Guid.NewGuid()).ToArray();
// Generate the list (not in random order)
var one_to_36 = Enumerable.Range(1, 36);
var lst = one_to_36.Concat(one_to_36).Concat(one_to_36).Concat(one_to_36).ToList();
// Randomize the list by swapping random elements
Random rnd = new Random();
for(int i = 0; i < lst.Count; i++)
{
int i1 = rnd.Next(lst.Count);
int i2 = rnd.Next(lst.Count);
int tmp = lst[i1];
lst[i1] = lst[i2];
lst[i2] = tmp;
}
var seq = Enumerable.Range(0, 144);
var all = seq.ToList();
var random = new Random();
var result = seq.Select(i => {
var index = random.Next()%all.Count;
var r = all[index] % 36 + 1; all.RemoveAt(index);
return r;
}).ToList();
所属していません StackOverflow