[C#] 如何洗亂 List

2012-11-14


這問題很好玩,之前跟 The God of Excel -智揚學長 在旅行途中一直在想這問題..Orz..
剛好這幾天有遇到這樣的需求,因為老闆希望撈出來的商品,不要順序都一樣,是否可以增加變化感..
又再度引發公司熱烈討論,這問題真是令人著迷?!
無論是效率,或是方法真的都很好玩..
下面是我提供的方法..我在List 中先依序放入 1~50
之後再丟入ShuffleList中將它洗亂…
依序放入 1~ 50 :

List<string> pool=new List<string>();
for (int i = 1; i <= 50; i++)
{
    pool.Add(i.ToString());
}

洗亂的 Method:

 


public void ShuffleList<T>(ref List<T> list)
{
    Random rnd = new Random(DateTime.Now.Millisecond);
    for (int i = list.Count-1; i > 0;i-- )
    {
        int p = rnd.Next(i);
        T swap = list[p];
        list[p] = list[i];
        list[i] = swap;
    }  
}

呼叫 :
 


ShuffleList(ref pool);
foreach(var res in pool)
{
   Response.Write(res+",");
}

結果:

2012-08-31_214708

2012-08-31_214713

當然有其他更有效率的方法,也歡迎提供…


91 哥 提供 :




Random rnd = new Random();

list.OrderBy(o => rnd.Next());

補充一個網站 :http://www.dotblogs.com.tw/shadow/archive/2011/12/30/63779.aspx

超級詳細…


當麻許的超技八 2014 | Donma Hsu Design.