我有从51个精灵中随机选择15个精灵的代码。它可以生成2个重复的精灵(我可以接受),但我想避免3个重复的值。我该如何预防?
我的代码
for (int i = 0; i < 16; i++)
{
int arrIndex = UnityEngine.Random.Range(0, tasSprites.Length);
tasSprite = tasSprites[arrIndex];
tasName = tasSprite.name;
taslar.Add(Int32.Parse(tasName));
}
答案 0 :(得分:5)
您是否尝试过检查每个生成的索引在taslar
中是否已经出现过两次,如果已经出现过,是否又生成了另一个?
while (taslar.Count < 16)
{
int arrIndex = UnityEngine.Random.Range(0, tasSprites.Length);
tasSprite = tasSprites[arrIndex];
tasName = tasSprite.name;
int value = Int32.Parse(tasName);
if (taslar.Count(t => t == value) < 2)
{
taslar.Add(value);
}
}
答案 1 :(得分:2)
您可以执行以下操作:
int[] indexesCount = new int[tasSprites.Length];
while (taslar.Count < 16)
{
int arrIndex = UnityEngine.Random.Range(0, tasSprites.Length);
if (indexesCount[arrIndex] == 2)
{
continue;
}
indexesCount[arrIndex]++;
tasSprite = tasSprites[arrIndex];
tasName = tasSprite.name;
taslar.Add(Int32.Parse(tasName));
}
请注意,当tasSprites.Length
相对较小时,此解决方案是“好的”。我们正在创建一个tasSprites.Length
大小的临时数组,以查看已经使用了哪些数字。
答案 2 :(得分:1)
这将为您避免可能重复生成已经使用两次的值的机会。