如何随机化文本文件中获得的单词

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何随机化文本文件中获得的单词相关的知识,希望对你有一定的参考价值。

我想问一下,如何将我从我制作的文本文件数据中获得的单词随机化。

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

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

我创建了一个名为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);
        }

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

EDITTED

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

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循环,然后检查,你的初始列表有Item(count> 0)
  4. 使用Random,并执行qazxsw poi
  5. 获取随机数索引中的项目并将其附加到结果列表,(如果使用数组,则替换空闲插槽) rand.Next(0, initialList.Count)

以上是关于如何随机化文本文件中获得的单词的主要内容,如果未能解决你的问题,请参考以下文章

python如何查找两个文本文件之间的所有单词匹配

如何使用apache spark通过列表对文本中的特定单词进行去标识化?

VBA - 如何使随机化字符串数组工作?

如何在不重复单词并遍历整个数组的情况下从数组中随机播放文本? (迅速)

如何在每个构建中随机化 ProGuard 字典?

文本的词条化和向量化