如何为数组做随机循环

时间:2014-05-16 21:08:22

标签: c#

我想让代码变得简单:在英语上单词并使用单词的所有字符制作随机数组。对于激烈的,这个词:" qweasdzxc"应该代表:" adwseqzcx" (随机)。 所以代码是:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace randomLoop
{
  class Program
 {
    static void Main(string[] args)
    {
        string s = "qweasdzxc";
        string[] q = newArray(s);
        for (int i = 1; i < s.Length - 1; i++)
        {
            Console.Write(q[i]);
        }
    }

    public static char[] getArrayofstring(string s)
    {
        char[] c = s.ToCharArray();
        return c;

    }

    public static Random rnd = new Random();

    public static string[] charAndNumber(char c, int lengthOftheWord)//0-char 1-integer
    {
        string[] array = new string[2];
        array[0] = c.ToString();
        array[1] = (rnd.Next(lengthOftheWord)).ToString();
        return array;

    }

    public static string[] newArray(string s)
    {
        string[] c = new string[s.Length];
        int j = 1;
        string[] q = charAndNumber(s[j], s.Length - 1);

        for (int i = 1; i < c.Length - 1; i++)
        {
            c[i] = "";

        }
        int e = 1;

        while (e.ToString() != q[1])
        {

            c[e] = q[0];
            j++;//for the character s[j] see up
            e++;//for the loop
        }


        return c;
    }
}

}

1 个答案:

答案 0 :(得分:0)

看起来你只是想要改变字符并生成一个新的字符串。你可以使用使用Fisher-Yates shuffle算法的方法(来自this回答,我根据你的情况对它进行了一些修改) :

public static void Shuffle<T>(this T[] source)  
{  
    Random rng = new Random();  
    int n = source.Length; 
    while (n > 1) {  
        n--;  
        int k = rng.Next(n + 1);  
        T value = source[k];  
        source[k] = source[n];  
        source[n] = value;  
    }  
}

然后使用它:

string s = "qweasdzxc";
char[] chars = s.ToCharArray();
chars.Shuffle();
string random = new string(chars);

另请注意,这是一种扩展方法,因此您需要将其放入 public static 类。