在c#中随机重新排列项目列表的最佳方法是什么?

Arr*_*n S 6 .net c# random

我有一个对象列表,我想在每个请求上随机重新排序.这样做的最佳方式是什么?

Gan*_*ant 12

某种Knuth-Fisher-Yates shuffle算法怎么样?

for (int i = cards.Length - 1; i > 0; i--)
{
    int n = rand.Next(i + 1);
    Swap(ref cards[i], ref cards[n]);
}
Run Code Online (Sandbox Code Playgroud)

代码取自Coding Horror.这也是关于人们经常如何做错的推荐读物.


BFr*_*ree 6

看看这个酷炫的Linq做法:

public class Employee
{
    public int Id
    {
        get;
        set;
    }
    public string Name
    {
        get;
        set;
    }
}
Run Code Online (Sandbox Code Playgroud)

填充列表:

    List<Employee> list = new List<Employee>();

    list.Add(new Employee { Id = 1, Name = "Davolio Nancy" });
    list.Add(new Employee { Id = 2, Name = "Fuller Andrew" });
    list.Add(new Employee { Id = 3, Name = "Leverling Janet" });
    list.Add(new Employee { Id = 4, Name = "Peacock Margaret" });
    list.Add(new Employee { Id = 5, Name = "Buchanan Steven" });
    list.Add(new Employee { Id = 6, Name = "Suyama Michael" });
    list.Add(new Employee { Id = 7, Name = "King Robert" });
    list.Add(new Employee { Id = 8, Name = "Callahan Laura" });
    list.Add(new Employee { Id = 9, Name = "Dodsworth Anne" });
Run Code Online (Sandbox Code Playgroud)

然后排序:

    list = list.OrderBy(emp => Guid.NewGuid()).ToList();
Run Code Online (Sandbox Code Playgroud)

信用