如何随机化文本文件上获取的单词


我想

问一下,我是否可以随机化我从我制作的文本文件数据中获得的单词。

我已经从文本文件中获得了单词并存储到字符数组中。

这是我到目前为止所拥有的

我创建了一个名为 Shuffle 的方法

void Shuffle(string[] chArr)
    {
        //Shuffle
        for (int i = 0; i < chArr.Length; i++)
        {
            string tmp = chArr[i].ToString();
            int r = Random.Range(i, chArr.Length);
            chArr[i] = chArr[r];
            chArr[r] = tmp;
        }
        Debug.Log(chArr);
    }

并像这样使用它

string temp = textArray[rowsToReadFrom[0]];
        temp = System.Text.RegularExpressions.Regex.Replace(temp, @"s", "");
        char[] chArr = temp.ToCharArray();
        string s = chArr.ToString();
        string[] ss = new string[] { s };
        Shuffle(ss);
        foreach (char c in chArr)
        {
            testObject clone = Instantiate(prefab.gameObject).GetComponent<testObject>();
            clone.transform.SetParent(container);
            charObjects.Add(clone.Init(c));
            //Debug.Log(c);
        }

它仍然没有随机化我从文本文件数据中获得的单词。

已编辑

到目前为止,这就是我所做的

string temp = textArray[rowsToReadFrom[0]];
        temp = System.Text.RegularExpressions.Regex.Replace(temp, @"s", "");
        char[] chArr = temp.ToCharArray();
        string charResult = "";
        for(int i = 0; i < chArr.Length; i++)
        {
            int ran = Random.Range(0, chArr.Length);
            charResult += chArr[ran];
        }
        Debug.Log(charResult);
        foreach (char c in charResult)
        {
            testObject clone = Instantiate(prefab.gameObject).GetComponent<testObject>();
            clone.transform.SetParent(container);
            charObjects.Add(clone.Init(c));
            //Debug.Log(c);
        }

但是,例如,与其给我"放弃"这个词,它有时会给我一个随机的单词"aaaabn",有人可以帮助我为什么吗?

我将使用Fisher–Yates_shuffle

 public static string Shuffle(string str)
    {
        System.Random random = new System.Random();         
        var array = str.ToCharArray();
        for (int i = 0; i < array.Length; i++)
        {
            int j = random.Next(i, array.Length); 
            char temp = array[i]; 
            array[i] = array[j];
            array[j] = temp;
        }
        return String.Join("", array);
    }

并使用它只需做

var f = "hello";
Console.WriteLine(Shuffle(f));

您的代码只是从该单词中获取随机字母,但不排除重复。相反,您想要的是随机化字符数组并将其转换回string

System.Random rnd = new System.Random();
Char[] randomCharArray = chArr.OrderBy(x => rnd.Next()).ToArray();
string charResult = randomCharArray.ToString();

Unity 有自己的Random实现,因此请确保使用System.Random

如果您使用列表(让我们称之为初始列表(会最容易,(它可能有一些性能过热来删除时移位,但我想知道使用链表是否会解决这个问题......

如果你按照我说的去做,你可以做什么:

  1. 用您的单词、字符或您想要随机化的任何数据填充列表
  2. 创建另一个列表或数组以将随机数据存储在(结果(中
  3. 创建一个 while 循环,并检查 while,您的初始列表有项目(计数> 0(
  4. 使用随机,并执行rand.Next(0, initialList.Count)
  5. 获取随机数索引中的项目并将其附加到结果列表中,(如果使用数组,则替换空闲插槽(

    List<string> initial = new List<string>();
    initial.AddRange(data);
    Random rand = new Random();
    List<string> result = new List<string>();
    while (initial.Count > 0) // LINQ: initial.Any() 
    {
        int index = rand.Next(0, initial.Count);
        result.Add(initial[index]);
        initial.RemoveAt(index);
    }
    return result;
    

相关内容

  • 没有找到相关文章

最新更新