2017-03-24 44 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