Самый быстрый способ случайно переупорядочить коллекцию LINQ? - PullRequest
4 голосов
/ 29 мая 2011

У меня есть список

Я хотел бы изменить порядок так, чтобы они были в случайном порядке.

Какой самый быстрый способ сделать это (самый быстрый, я имею в виду наименьшее количество кода)

Ответы [ 2 ]

10 голосов
/ 29 мая 2011

Примечание: в соответствии с комментарием mquander, следующий ответ не является рекомендуемым способом выполнения "случайного упорядочения", поскольку он семантически неверен, неэффективен по сравнению с принятым алгоритмом перемешивания, он основан нана частных деталях реализации Guid s, и даже злоупотребляет синтаксисом запросов LINQ.Тем не менее, это «наименьшее количество кода» (с точки зрения написанного им самим, а не обработанного платформой) в соответствии с запросом OP.

var randomOrdering = yourList.OrderBy(o => Guid.NewGuid());
5 голосов
/ 29 мая 2011

Если вы хотите случайным образом переупорядочить вместо , вы должны перетасовать список, тогда использование метода расширения - это простая однострочная строка. Это предполагает, что у вас уже есть коллекция на основе IList.

Использование: myList.Shuffle();

public static void Shuffle<T>(this IList<T> list)  
{  
    Random rng = new Random();  
    int n = list.Count;  
    while (n > 1) 
    {  
        n--;  
        int k = rng.Next(n + 1);  
        T value = list[k];  
        list[k] = list[n];  
        list[n] = value;  
    }  
}

Кредит идет на этот ответ: Случайный список

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...