我有一个我要随机排列或混淆的对象列表。这可能吗? 该列表由公司产品构成。我占据了每家公司的前2名,并将其余的添加到另一个名单中。我想混淆第二个清单。
感谢您的帮助
答案 0 :(得分:5)
试试这个:
var rnd = new Random();
var shuffledList = list.OrderBy(x => rnd.Next()).ToList();
这很好用,因为OrderBy实现首先创建一个键列表,然后使用生成的键进行排序。因此lamba表达式仅针对每个项目调用一次。在排序过程中,列表中的每个项目都有自己的随机排序键。
答案 1 :(得分:1)
您不需要O(N * LogN)操作。只需使用FisherYatesShuffle
即可另请参阅:http://en.wikipedia.org/wiki/Fisher%E2%80%93Yates_shuffle
答案 2 :(得分:1)
尝试NBuilder - 它会构建对象列表,并为属性提供恶意生成的值(您也可以手动提供任何值):
var products = Builder<Product>.CreateListOfSize(10).Build();
如果您想要(非增量)随机项,您可以从任何集合中选择它们:
var randomProducts = Pick<Product>.UniqueRandomList(3).From(products);