【发布时间】:2011-05-29 01:22:15
【问题描述】:
我有一个列表
我想重新排序,所以它们的顺序是随机的。
最快的方法是什么(最快,我的意思是最少的代码)
【问题讨论】:
-
Randomize a List<T> in C# 的可能重复项
我有一个列表
我想重新排序,所以它们的顺序是随机的。
最快的方法是什么(最快,我的意思是最少的代码)
【问题讨论】:
注意: 根据 mquander 的评论,以下答案不是执行“随机排序”的推荐方法,因为它在语义上不正确,与公认的 shuffle 算法相比效率不高,它基于
Guids 的私有实现细节, 甚至滥用 LINQ 查询语法。但是,它是“最少的代码”(就由自己编写而不是由框架处理而言)为 由 OP 要求。
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;
}
}
归功于这个答案:Randomize a List<T>
【讨论】: