簡體   English   中英

如何隨機化文本文件中出現的單詞

[英]How to randomize the word that been get on the textfile

我想問一下如何將我從文本文件數據中得到的單詞隨機化。

實際上,我已經從文本文件中獲取了單詞並將其存儲到字符數組中。

這是我到目前為止的

我創建了一種稱為隨機播放的方法

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”,有人可以幫我為什么嗎?

您的代碼只是從該單詞中獲取隨機字母,但不排除重復的字母。 您想要的是將字符數組隨機化並將其轉換回string

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

Unity具有自己的Random實現,因此請確保使用System.Random

我將使用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));

如果您使用列表(將其稱為初始列表),則最容易,(它可能會對移出移位產生一些性能過熱的影響,但我想知道使用鏈表是否可以解決此問題...

如果您按照我說的做,這里可以做什么:

  1. 用您的單詞,字符或要隨機化的任何數據填充列表
  2. 創建另一個列表或數組以存儲隨機數據(結果)
  3. 創建一個while循環,並檢查while,您的初始列表具有Item(計數> 0)
  4. 使用Random並執行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; 

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM