C# - Перемешать Массив
Здравствуйте дорогие программисты. В этой статье вы узнаете как перемешать массив или как получить массив неповторяющихся чисел.
Введение: Дело было вечером. Писал я маленькую программку, чисто для себя, чтобы попрактиковаться и получить новые навыки. Так как я программист на любительском уровне, знания в области программирования очень приветствуется. Так вот, писал я код и на какой-то момент мне мне было необходимо перемешать массив с разными числами так чтобы они были не повторялись. В Google я нашел ответ на свой вопрос.
Итак, чтобы перемешать массив достаточно писать 3-х строчный код:
Действительно код заработал, но я хотел узнать как алгоритм работает. Я попытаюсь вам объяснить как он работает.
Как работает этот код? Если длина моего массива равна 10, то компилятор генерирует 10 случайных неповторяющихся чисел, помещает в временный массив, после чего массив array сортируется по возрастанию случайных чисел помещенных в временном массиве.
Пример:
До перемешивания:
После перемешивания:
Введение: Дело было вечером. Писал я маленькую программку, чисто для себя, чтобы попрактиковаться и получить новые навыки. Так как я программист на любительском уровне, знания в области программирования очень приветствуется. Так вот, писал я код и на какой-то момент мне мне было необходимо перемешать массив с разными числами так чтобы они были не повторялись. В 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