【问题标题】:How to randomly mix List content under the same indexes [duplicate]如何在相同索引下随机混合列表内容[重复]
【发布时间】:2017-03-24 18:14:29
【问题描述】:

我想知道,在不使用另一个列表进行随机重写的情况下,将List<string> list = new List<string>(); 内容随机混合到列表中的正确方法是什么。

例如,如果我以这种方式通过索引获得价值:

list[0];
list[1];
list[2];
list[3];

订单输出为:

line1
line2
line3
line4

在期望的混合之后,如何在相同的索引下获得它,但在随机混合的值上:

list[0];
list[1];
list[2];
list[3];

获取列表中的随机顺序:

line2
line4
line1
line3

【问题讨论】:

    标签: c# list shuffle


    【解决方案1】:

    试试这个:

    // Create an randomizer object
    Random r = new Random();
    
    // Create a list of strings
    List<string> list = new List<string>() { "line1", "line2", "line3", "line4" };
    
    // Sort list randomly
    list = list.OrderBy(x=>r.Next()).ToList();
    

    【讨论】:

    • 是否保证 OrderBy 中的 lambda 每个项目只调用一次?如果不是,那么对同一项目的两次不同调用将返回不同的值。该顺序仍然是随机的,但可能会导致意外行为。 (注意:当前实现每个项目只调用一次 lambda 的事实并不意味着未来的实现也会这样做)
    • 这在传统上是不好的 shuffle 实现。请不要使用它。请注意,该问题明确要求“正确的混合方式”,而不是本答案中演示的“随机播放列表的方式”。
    • 它也没有就地进行改组,如果我没记错问题中的要求的话。
    • 任务是按随机顺序对列表的顺序进行排序。这个例子完美而快速地做到了。
    猜你喜欢
    • 1970-01-01
    • 2018-02-23
    • 2019-04-24
    • 2018-08-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-02-25
    • 1970-01-01
    相关资源
    最近更新 更多