2017-03-24 41 views
0

我在想,什么是随机将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 

回答

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(); 
+0

才可保证在排序依据拉姆达只是每个项目调用一次?如果不是,则同一项目上的两个不同的调用将返回不同的值。订单仍然是随机的,但可能会导致意外的行为。 (注意:目前的实现只为每个项目调用lambda一次并不意味着未来的实现将会这样做) –

+0

这是传统上糟糕的shuffle实现。请不要使用它。请注意,这个问题明确要求“正确的混合方式”,而不是“混洗列表的方式”,这在这个答案中得到了证明。 –

+0

它也没有进行洗牌,这是如果我没有把这个问题弄错的话。 – BitTickler