使用.NET随机化数组的最好方法?

内容来源于 Stack Overflow,并遵循CC BY-SA 3.0许可协议进行翻译与使用

  • 回答 (2)
  • 关注 (0)
  • 查看 (97)

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

请在答案中包含C#示例。

提问于
用户回答回答于

如果你使用.NET 3.5,你可以使用下面的IEnumerable coolness

Random rnd=new Random();
string[] MyRandomArray = MyArray.OrderBy(x => rnd.Next()).ToArray();    

这里是相应的VB.NET代码:

Dim rnd As New System.Random
Dim MyRandomArray = MyArray.OrderBy(Function() rnd.Next)
用户回答回答于

以下实现使用Fisher-Yates算法。它运行在O(n)的时间和洗牌,所以比“随机排序”技术更好的表现,尽管它是更多的代码行。看这里的一些比较性能测量。我已经使用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};
new Random().Shuffle(array);

扫码关注云+社区

领取腾讯云代金券