C# - Перемешать Массив

Здравствуйте дорогие программисты. В этой статье вы узнаете как перемешать массив или как получить массив неповторяющихся чисел.

Введение: Дело было вечером. Писал я маленькую программку, чисто для себя, чтобы попрактиковаться и получить новые навыки. Так как я программист на любительском уровне, знания в области программирования очень приветствуется. Так вот, писал я код и на какой-то момент мне мне было необходимо перемешать массив с разными числами так чтобы они были не повторялись. В Google я нашел ответ на свой вопрос.

Итак, чтобы перемешать массив достаточно писать 3-х строчный код:
var array = new[] { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 };
var random = new Random(DateTime.Now.Millisecond);
array = array.OrderBy(x => random.Next()).ToArray();
Действительно код заработал, но я хотел узнать как алгоритм работает. Я попытаюсь вам объяснить как он работает.

var array = new[] { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 };
В первой строке вам должно быть все понятно, здесь инициализируется целочисленный массив с числами от 1 до 10.

var random = new Random(DateTime.Now.Millisecond);
Во второй строке инициализируется генератор псевдослучайных чисел, т.е. генератор который выдает случайные числа. А почему мы передали Random'у в качестве seed время в милисекундах (DateTime.Now.Millisecond)? Как я понял именно привязка к времени дает нам случайные неповторяющиеся числа.

array = array.OrderBy(x => random.Next()).ToArray();
Вот здесь самый смак :). Именно здесь я не понимал как происходит перемешивание чисел, но в конце-концов добился результатов и понял(не уверен если правильно) как происходит перемешивание массива. Кто не знает это LINQ запрос. Объяснить что это такое я не буду, так как сделать за меня может Wikipedia.
Как работает этот код? Если длина моего массива равна 10, то компилятор генерирует 10 случайных неповторяющихся чисел, помещает в временный массив, после чего массив array сортируется по возрастанию случайных чисел помещенных в временном массиве.

Пример:
До перемешивания:
Index Массив array Временный Массив
0 1 256
1 2 44
2 3 32
3 4 544
4 5 1072
5 6 14
6 7 15
7 8 21
8 9 286
9 10 428
После перемешивания:
Index Массив array Временный Массив
0 6 14
1 7 15
2 8 21
3 3 32
4 2 44
5 1 256
6 9 286
7 10 428
8 4 544
9 5 1072

Ну вот и все. Если заметили грамматические ошибки или работоспособность кода нарушена пишите в комментариях или на почту: powercodx@mail.ru
Автор: PowerCodX, 2013

Postări populare de pe acest blog

[.NET] C# Разделить строку на слова

C# взаимодействие с сайтом