gpt4 book ai didi

c# - 使用 .NET 随机化数组的最佳方法

转载 作者:IT王子 更新时间:2023-10-29 03:33:37 25 4
gpt4 key购买 nike

使用 .NET 随机化字符串数组的最佳方法是什么?我的数组包含大约 500 个字符串,我想创建一个包含相同字符串但顺序随机的新 Array

请在您的回答中包含一个 C# 示例。

最佳答案

以下实现使用 Fisher-Yates algorithm又名 Knuth Shuffle。它在 O(n) 时间内运行并就地洗牌,因此比“随机排序”技术性能更好,尽管它的代码行数更多。参见 here用于一些比较性能测量。我使用了 System.Random,它适用于非加密目的。*

static class RandomExtensions
{
public static void Shuffle<T> (this Random rng, T[] array)
{
int n = array.Length;
while (n > 1)
{
int k = rng.Next(n--);
T temp = array[n];
array[n] = array[k];
array[k] = temp;
}
}
}

用法:

var array = new int[] {1, 2, 3, 4};
var rng = new Random();
rng.Shuffle(array);
rng.Shuffle(array); // different order from first call to Shuffle

* 对于较长的数组,为了使(非常大的)排列数量具有相同的可能性,有必要通过多次迭代运行伪随机数生成器 (PRNG),以便每次交换产生足够的熵。对于 500 个元素的数组来说,这只是可能的 500 个中的很小一部分!使用 PRNG 可以获得排列。尽管如此,Fisher-Yates 算法是无偏的,因此洗牌将与您使用的 RNG 一样好。

关于c# - 使用 .NET 随机化数组的最佳方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/108819/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com