随机重新订购LINQ集合的最快方法?

时间:2011-05-29 01:22:16

标签: c# .net linq c#-4.0

我有一个列表

我想重新订购它,以便它们按随机顺序排列。

最快的方式是什么(最快,我的意思是代码最少)

2 个答案:

答案 0 :(得分:10)

  

注意:根据mquander的评论,以下答案不是推荐的执行“随机排序”的方法,因为它在语义上不正确,与接受的shuffle算法相比效率不高,它基于Guid s的私有实施细节,   甚至滥用LINQ查询语法。但是,它是“最少量的代码”(就自己编写而不是由框架处理而言)   OP要求。

var randomOrdering = yourList.OrderBy(o => Guid.NewGuid());

答案 1 :(得分:5)

如果您想随机重新排序 ,您应该随机播放列表,使用扩展方法的用法就是一个简单的单行。这假设您已经拥有基于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;  
    }  
}

归功于这个答案:Randomize a List<T>