Генерируйте и повторите число в C#

Я хочу генерировать массив, который имеет 144 числа от 1-> 36 в произвольном порядке (таким образом, каждое число повторяется 4 раза). Мы можем использовать Счетный. Повторитесь и Счетный. Диапазон, чтобы сделать это. Если да, чем объясните мне как?

5
задан tshepang 15 May 2014 в 19:29
поделиться

4 ответа

Ну, создать последовательность со всеми числами легко:

var items = from x in Enumerable.Range(1, 36)
            from y in Enumerable.Repeat(x, 4)
            select y;

Тогда вы можете просто использовать ToArray, чтобы получить ее в массив и перетасовать. Существует множество вопросов о перетасовке массива в C# на SO, например this. Можно либо использовать этот код напрямую, либо вызвать ToArray и перетасовать массив на месте, не выдавая его в конце.

.
10
ответ дан 13 December 2019 в 22:09
поделиться
int[] numbers = Enumerable.Range(0, 144).Select(i => (i % 36)+1).OrderBy(g => Guid.NewGuid()).ToArray();
0
ответ дан 13 December 2019 в 22:09
поделиться
// 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;
}
0
ответ дан 13 December 2019 в 22:09
поделиться
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();
.
0
ответ дан 13 December 2019 в 22:09
поделиться
Другие вопросы по тегам:

Похожие вопросы: