可能重复:
Most efficient way to randomly “sort” (Shuffle) a list of integers in C#
如何有效地创建List<T>
的随机副本?
List<string> myList = new List<string>();
myList.Add("A");
myList.Add("B");
myList.Add("C");
// Now an extension method or a function which returns a random arrangement of myList:
List<string> GetRandomList()
{
// List<string> result = new List<string>();
// Random rnd = new Random();
// Inside a loop
// result.Add(myList[rnd.Next(1, myList.Count)]);
}
扩展方法应为public static List<T> Shuffle(List<T> this)
答案 0 :(得分:4)
你正在寻找一个Shuffle,那里有各种各样的实现,通常是Fisher-Yates shuffle。
以下从here获取的通用实现:
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;
}
}
请注意,这会将列表重新排序,如果您想要这样做,很容易重构它以返回新列表。
答案 1 :(得分:0)
public List<T> Random<T>(this IEnumerable<T> collection)
{
return collection.OrderBy(i => Guid.NewGuid()).ToList();
}