我有一个列表
我想重新订购,所以它们是按随机顺序排列的。
最快的方法是什么(最快,我指的是最少的代码量)
注意:根据mquander的评论,以下答案不是执行"随机排序"的推荐方法,因为它在语义上不正确,与可接受的shuffle算法相比效率不高,它基于
Guid
s的私有实现细节,甚至滥用LINQ查询语法。然而,它是"最少的代码量"(就自己编写而不是由框架处理而言)作战人员要求
var randomOrdering = yourList.OrderBy(o => Guid.NewGuid());
如果您想在的位置随机重新排列,您应该打乱列表,那么使用扩展方法就是一个简单的单行。这假设您已经有了一个基于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;
}
}
归功于这个答案:随机化列表<T>