【问题标题】:Randomly arrange a list<object>随机排列一个列表<object>
【发布时间】:2012-07-23 11:36:56
【问题描述】:

我有一个我想要随机排列或混杂的对象列表。这可能吗? 该列表是根据公司产品建立的。我选择每家公司的前 2 名,其余的添加到另一个列表中。我想弄乱第二个列表。

感谢您的帮助

【问题讨论】:

标签: c# list shuffle


【解决方案1】:

试试这个:

var rnd = new Random();
var shuffledList = list.OrderBy(x => rnd.Next()).ToList();

这很好用,因为 OrderBy 实现首先创建一个键列表,然后使用生成的键进行排序。因此,lba 表达式仅对每个项目调用一次。在排序过程中,列表中的每个项目都有自己的随机排序键。

【讨论】:

  • 当比较相同的对象会产生不同的结果时,这会给 OrderBy 方法带来问题。
  • @Tomas:不,你错了。看一下 OrderBy 的实现:类 System.Linq.EnumerableSorter,方法 Sort。我在答案中添加了一个关于此的句子。
【解决方案2】:

您不需要 O(N*LogN) 操作。只需使用FisherYatesShuffle

另请参阅:http://en.wikipedia.org/wiki/Fisher%E2%80%93Yates_shuffle

【讨论】:

    【解决方案3】:

    试试NBuilder - 它构建对象列表,并为属性提供生成的值(您也可以手动提供任何值):

    var products = Builder<Product>.CreateListOfSize(10).Build();
    

    如果您想要(非增量)随机项目,您可以从任何集合中挑选它们:

    var randomProducts = Pick<Product>.UniqueRandomList(3).From(products);
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-01-28
      • 1970-01-01
      • 2016-07-15
      • 2012-06-24
      • 1970-01-01
      • 1970-01-01
      • 2011-07-17
      相关资源
      最近更新 更多