通过更改索引更改数组值顺序

时间:2016-06-16 05:07:00

标签: c# arrays sorting random

我正在尝试通过更改索引来随机更改数组的元素。

到目前为止,我的代码如下:

    public static string[] Shuffle(string[] wordArray)
    {
        int swapIndex = 0;
        string temp;
        Random random = new Random();
        for (int i = 0; i < wordArray.Length; i++)
        {
            System.Console.WriteLine("random " + random.Next(0, wordArray.Length));
            swapIndex = (int)(random.Next(0, wordArray.Length));

            temp = wordArray[i];
            wordArray[i] = wordArray[swapIndex];
            wordArray[swapIndex] = temp;
        }
        return wordArray;
    }

调用该方法的函数如下:

    static string[] words1 = new string[] { "1", "2", "3" };
    static string[] days = new string[] { "M", "T", "W", "Th", "F", "S", "Su" };

    public static void playListCreation()
    {
        for (int j = 0; j < days.Length; j++)
        {
            var result = Shuffle(words1);
            foreach (var i in result)
            {
                System.Console.WriteLine(i + " ");
            }
            System.Console.WriteLine("/n");
        }
    }

代码的问题是每次我在swapIndex值中得到相同的数字。我总是得到:

  

随机2

     

随机2

     

随机0

在所有迭代中。我不知道我做错了什么。

有什么想法吗?提前谢谢。

加成

现在解决方案很好。但并不完美。由于我有随机值,我可以得到两个相同的结果。

  

例如:

     周一:

     

歌曲1

     

歌曲2

     

歌曲3

     周二:

     

歌曲2

     

歌曲1

     

歌曲3

     周三:

     

歌曲1

     

歌曲2

     

歌曲3

等等......

来自

的清单
  

周一

  

星期三

在这种情况下,

是相同的。我需要控制它,但正如你在代码中看到的那样,一旦我从一天获得列表,我就打印出来。我想把它放在数组或元组上并检查该元组是否存在,但我认为它太复杂了。我该如何解决这种情况?谢谢!

1 个答案:

答案 0 :(得分:3)

您只需要声明并初始化Random一次。您在Shuffle方法中声明它并在循环中调用它。这意味着您的Random对象每次都使用相同的种子进行初始化,因此很明显它会生成相同的“随机”数字序列。

private static Random random = new Random();

    public static string[] Shuffle(string[] wordArray)
    {
        int swapIndex = 0;
        string temp;

        for (int i = 0; i < wordArray.Length; i++)
        {
            System.Console.WriteLine("random " + random.Next(0, wordArray.Length));
            swapIndex = (int)(random.Next(0, wordArray.Length));

            temp = wordArray[i];
            wordArray[i] = wordArray[swapIndex];
            wordArray[swapIndex] = temp;
        }
        return wordArray;
    }

此外,stop-cran有一个有效点 - Console.WriteLine得到一个不同的随机数,然后是swapIndex变量。

如果要打印出swapIndex变量的值,请按以下方式执行:

swapIndex = (int)(random.Next(0, wordArray.Length));
System.Console.WriteLine("random {0}", swapIndex);