📜  c# shuffle list - C# (1)

📅  最后修改于: 2023-12-03 14:39:44.007000             🧑  作者: Mango

C# Shuffle List

在 C# 中,我们有时需要将一个列表(List)打乱顺序,以便在程序中进行随机操作。这时就可以使用 C# 的随机数生成器(Random)生成随机索引,然后交换对应位置的元素来实现列表的打乱。

实现

下面是一个实现 List 打乱的示例代码:

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;
    }
}

使用这个方法,我们可以轻松打乱一个 List 对象:

// 创建一个包含数字 1 到 5 的 List
List<int> numbers = new List<int> { 1, 2, 3, 4, 5 };

// 打乱 List
numbers.Shuffle();

// 输出打乱后的结果
foreach (var number in numbers)
{
    Console.Write(number + " ");
}
// 输出示例:2 4 1 5 3
解析

这个方法使用了 Fisher-Yates 洗牌算法,该算法可以将一个有限的列表随机打乱,同时具有良好的随机性和均匀性。

在方法中,我们首先定义了一个 C# 的随机数生成器(Random),然后通过循环迭代中随机选取一个元素索引,交换随机选取的元素与列表末尾的元素,每次循环都递减 n 的值。这样就可以在 O(n) 的时间复杂度内打乱整个列表。

总结

通过实现 Fisher-Yates 洗牌算法,我们可以轻松在 C# 中实现列表的随机打乱。基于这个方法,我们可以扩展,进行更加复杂的随机操作。