C# 如何在相同索引下随机混合列表内容

C# 如何在相同索引下随机混合列表内容,c#,list,shuffle,C#,List,Shuffle,我想知道,混合列表=新列表的正确方法是什么;列表中的内容是随机的,不使用另一个列表进行随机重写 例如,如果我以这种方式通过索引获取值: list[0]; list[1]; list[2]; list[3]; 订单输出为: line1 line2 line3 line4 在所需的混合后,如何在相同的索引下,但在随机混合的值上获得它: list[0]; list[1]; list[2]; list[3]; 要获取列表中的随机顺序,请执行以下操作: line2 line4 line1 line3

我想知道,混合列表=新列表的正确方法是什么;列表中的内容是随机的,不使用另一个列表进行随机重写

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

list[0];
list[1];
list[2];
list[3];
订单输出为:

line1
line2
line3
line4
在所需的混合后,如何在相同的索引下,但在随机混合的值上获得它:

list[0];
list[1];
list[2];
list[3];
要获取列表中的随机顺序,请执行以下操作:

line2
line4
line1
line3
试试这个:

// 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实现。请不要用它。请注意,这个问题明确要求正确的混合方式,而不是在这个答案中演示的对列表进行洗牌的方式。它也没有就地进行洗牌,如果我没有弄错的话,这是问题中的一个要求。任务是按照随机序列对列表的顺序进行排序。这个例子做得既完美又迅速。