我有一个列表(planePosition)。我想随机使用这些列表值而不重复,所以我使用
for( int a=0; a< planePosition.Count; a++)
{
int r=Random.Range(0,planePosition.Count);
Newplan.transform.position = new Vector3 (planePosition[r].x, planePosition[r].y ,9.990011f);
planePosition.RemoveAt(r);
}
但我仍然得到重复值..
答案 0 :(得分:0)
只做
readonly Random _random= new Random();
for( int a=0; a< planePosition.Count; a++)
{
int r= _random.Range(0,planePosition.Count);
Newplan.transform.position = new Vector3 (planePosition[r].x, planePosition[r].y ,9.990011f);
planePosition.RemoveAt(r);
}
答案 1 :(得分:0)
没有随机函数可以保证值不会重复两次。这就是为什么它是随机的。这意味着如果你依赖它,你的代码将是脆弱的。
相反,你可以保留一个集合来跟踪使用过的ID
List<int> usedIndexes = new List<int>();
然后有一个获取非重复索引的方法:
private int GetRandomInt(int min, int max)
{
int num = Random.Range(min, max);
while(usedIndexes.Contains(num))
{
num = Random.Range(min, max);
}
return num;
}
答案 2 :(得分:0)
由于我目前的声誉,我无法发表评论。请不要将其视为答案。
我有一些问题:
1) 见juharr的评论。
2) 在这里,您始终(另一个)设置相同的字段/属性:
Newplan.transform.position = new Vector3 (planePosition[r].x, planePosition[r].y ,9.990011f);
这是你想要的行为吗?
3)通过删除您在列表中使用的值,我认为您确保不再使用它。这与随机无关。如果您始终使用列表的第一个值,这也应该有效。但是:您确定列表中的值是唯一的吗?也许您的问题不在于该方法。相反,它是提供planePosition-list的方法。
答案 3 :(得分:0)
我得到了答案:)
for(int a=0; a<16; a++)
{
//rnd = new Random ();
while (planePosition.Count != 0)
{
int index = Random.Range (0, planePosition.Count-1);
randomizedList.Add (planePosition [index]);
Newplan.transform.position = new Vector3 (randomizedList[r].x, randomizedList[r].y ,9.990011f);
planePosition.RemoveAt (index);
}
}
答案 4 :(得分:0)
private void ScoreRandomize()
{
List<int> listRnd = new List<int>();
listRnd.AddRange(scoreAmount); //scoreAmount is array or list with orginal data
for (int i = 0; i < listRnd.Count + i; i++)
{
int rnd = UnityEngine.Random.Range(0, listRnd.Count);
scoreDisplayTxts[i].text = listRnd[rnd].ToString();
scoreAmount[i] = listRnd[rnd];
listRnd.RemoveAt(rnd);
}
}