如何仅在unity,monodevelop中一次更改数组中的顺序

问题描述 投票:-1回答:2

我有数组fe(1,2,3,4,5),而我想在开始时仅显示此数字fe(4,3,2,1,5)的随机顺序,我写了函数,但是它重复相同的数字,但顺序没有变化。我的代码如下;

 public void Shuffle()
    {
        for (int i = 0; i < lists[BrojLevela].Length ; i++)
        {
            int rnd = Random.Range(0, lists[BrojLevela].Length);
            tempGO = lists[BrojLevela][rnd];
            lists[BrojLevela][rnd] = lists[BrojLevela][i];
            lists[BrojLevela][i] = tempGO;
        }
    }
c# arrays unity3d
2个回答
0
投票

Random.Range是一个Unity类,用于生成伪随机数,但是如果提供相同的范围,根据某些文档,它实际上会提供可重复的结果。如果将其更改为使用System.Random类,则它对我有用。

只需更改:

int rnd = Random.Range(0, lists[BrojLevela].Length);

收件人:

int rnd = new Random().Next(0, lists[BrojLevela].Length);

这是使代码示例按预期工作的最简单的更改,但是,最好在循环外部创建Random对象的实例并对其进行缓存,因为不需要每次都创建一个新的对象。


0
投票

我刚刚测试了它,它应该可以工作:

private IList<int> strList = new List<int>();
void Start()
{
    strList.Add(1);
    strList.Add(2);
    strList.Add(3);
    strList.Add(4);
    strList.Add(5);
}
void Update()
{
    if (Input.GetKeyDown(KeyCode.E))
    {
        Shuffle(strList);

        foreach(int a in strList)
        {
            Debug.Log(a.ToString());
        }

    }
}

public void Shuffle<T>(IList<T> list)
{


    int n = list.Count;
    int rnd = Random.Range(0, n-1);
    while (n > 1)
    {
        n--;
        int k = rnd;
        T value = list[k];
        list[k] = list[n];
        list[n] = value;
    }
}
© www.soinside.com 2019 - 2024. All rights reserved.