List 的随机副本[duplicate]

|                                                                                                                   这个问题已经在这里有了答案:                                                      
已邀请:
您正在寻找Shuffle,那里有各种实现,通常是Fisher-Yates shuffle。 下面是从此处获取的通用实现:
public static void Shuffle<T>(this IList<T> list)  
{  
    Random rng = new Random();  
    int n = list.Count;  
    while (n > 1) {  
        n--;  
        int k = rng.Next(n + 1);  
        T value = list[k];  
        list[k] = list[n];  
        list[n] = value;  
    }  
}
请注意,这将对列表进行重新排序,如果您要执行此操作,可以很容易地对其进行重构以返回新列表。     
public List<T> Random<T>(this IEnumerable<T> collection)
{
    return collection.OrderBy(i => Guid.NewGuid()).ToList();
}
感谢Jeff Atwood提供的解决方案。     

要回复问题请先登录注册