Member 14035055 Ответов: 1

Unity C# печатает строки случайным образом из списка после их выбора


I have two lists with 4 strings each. I shuffle them and then I select a string on each list to create a combination of strings from both lists. I want the four combinations (written below) repeated four times (so 16 combinations in total) but each of these combination should be presented in a random order.

Dog

Lion

Dog and car

Lion and car

From this code, I shuffle the strings then I select the first string from each list, I iterate using for loops and then generate 16 combinations. This code can shuffle, select and the prints are totally fine BUT prints the first selected string - 4 times, then the second selected string - 4 times. So everything works fine except that the order isn't random. So if dog is selected from the first list, it will print: dog, dog and car, dog, dog and car, then it will do this for lion (for the next 4 prints). So it will always print 4 times the string that gets selected from the first list. Whereas I want those selection to be random. Any advice would be helpful. 


Что я уже пробовал:

<pre>using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using TMPro;
using UnityEngine.UI;
using System;
using System.Linq;

public class randomLetters : MonoBehaviour
{

    List<string> mylist = new List<string>();
    List<string> mylist2 = new List<string>();


    string selected;
    string selected2;

    void Start()
    {
        mylist.Add("dog");
        mylist.Add("lion");
        mylist.Add("dog");
        mylist.Add("lion");

        mylist2.Add("carfordog");
        mylist2.Add("carforlion");
        mylist2.Add("carfordog");
        mylist2.Add("carforlion");
   
        Shuffle(mylist);
        Shuffle(mylist2);

        StartCoroutine(Wait());
    }


    IEnumerator Wait()
    {


        for (int i = 0; i < 4; i++)
        {
            selected = mylist[i];

            for (int j = 0; j < 4; j++)
            {
                selected2 = mylist2[j];


                    if (selected == "dog" && selected2 == "carfordog")
                    {
                        Debug.Log("Dog and Car");

                    }
                    else if (selected == "dog" && selected2 == "carforlion")
                    {
                        Debug.Log("Dog ");
                    }
                    else if (selected == "lion" && selected2 == "carforlion")
                    {
                        Debug.Log("Lion and Car ");
                    }
                    else if (selected == "lion" && selected2 == "carfordog")
                    {
                        Debug.Log("Lion");
                    }

                    yield return new WaitForSeconds(1);
            }

            yield return new WaitForSeconds(1);



        }

    }
    

    void Shuffle(List<string> lists)
    {
        for (int j = lists.Count - 1; j > 0; j--)
        {
            int rnd = UnityEngine.Random.Range(0, j + 1);
            string temp = lists[j];
            lists[j] = lists[rnd];
            lists[rnd] = temp;
        }
    }

}

Maciej Los

Почему? Shuffle функция циклически перебирает коллекцию элементов в списке?
Пожалуйста, отладьте программу, чтобы узнать, что такое int rnd = UnityEngine.Random.Range(0, j + 1); возвращается...

1 Ответов

Рейтинг:
1

Gerry Schmitz

Вы должны перетасовать list2 в "внешнем цикле" (не раньше), если вы хотите "комбинации внутри комбинаций".