📜  c# list shuffle - C# (1)

📅  最后修改于: 2023-12-03 15:13:49.234000             🧑  作者: Mango

C# List Shuffle

在C#中对List进行随机洗牌的方法。

实现方法

我们可以使用Fisher-Yates洗牌算法来实现对List的随机洗牌。该算法是一个经典的乱序算法,也称之为Knuth Shuffle。其核心思想是通过不断地交换数组中的元素,从而随机生成乱序数组。

以下是C#中实现Fisher-Yates洗牌算法的代码片段:

public static void Shuffle<T>(IList<T> list)
{
    Random rand = new Random();
    int n = list.Count;
    for (int i = n - 1; i > 0; i--)
    {
        int j = rand.Next(i + 1);
        T temp = list[i];
        list[i] = list[j];
        list[j] = temp;
    }
}

以上代码中,我们定义了一个泛型方法Shuffle(),该方法接受一个IList<T>类型的参数list,即我们要进行洗牌的List。接着我们生成一个Random对象rand,用于生成随机数。

随后,我们使用倒序循环的方式遍历List中的元素,每次循环都在当前元素和其之前的元素中随机选择一个元素进行交换,从而实现随机洗牌。最后我们将洗牌后的结果存入原List中。

使用示例
List<int> numbers = new List<int>();
for (int i = 0; i < 10; i++)
{
    numbers.Add(i);
}

Console.WriteLine("Original list:");
foreach (int num in numbers)
{
    Console.Write(num + " ");
}

numbers.Shuffle();

Console.WriteLine("\nShuffled list:");
foreach (int num in numbers)
{
    Console.Write(num + " ");
}

以上示例代码中,我们首先创建一个包含10个整数的List,并将其打印出来。随后我们对List进行随机洗牌,再次打印出洗牌后的结果。

总结

如此简单的Fisher-Yates洗牌算法便能实现List的随机洗牌功能,令我们的程序更加生动有趣。