num_list = [1, 2]
alpha_list = ['a', 'b']
for i in range(len(num_list)):
print(num_list[i])
print(alpha_list[i])
如果我调用这个函数,我的电脑就死机了我做的不对,我只想在列表中添加 5 个新元素 gameManager.ActiveTasks.Dailytasks。谢谢!
答案 0 :(得分:3)
一般来说,宁可使用 <= 5
... 使用当前的 != 5
如果出于什么原因您的列表有 6
或更多元素 → 无限循环!< /strong>
据我所知,您正在尝试迭代并将元素添加到 相同 集合!
首先,无论如何这都会导致异常,因为不允许在迭代集合的同时修改它。
其次它是空的! → foreach
中的代码从不执行 → 永远不会将任何内容添加到您的列表中 → 无限循环!
我认为你想做的事情应该是这样的
var alreadyAdded = false;
foreach (Task i in gameManager.ActiveTasks.Dailytasks)
{
if (i == addingTask)
{
alreadyAdded = true;
continue;
}
}
if(!alreadyAdded)
{
gameManager.ActiveTasks.Dailytasks.Add(addingTask);
}
使用起来更容易
if(!gameManager.ActiveTasks.Dailytasks.Contains(addingTask))
{
gameManager.ActiveTasks.Dailytasks.Add(addingTask);
}
即使它可以那样工作(或在前面提到的代码之后),如果没有足够的可用任务来获得 5 个独特的任务怎么办? → 再次无限循环。
看起来您想要实现的是拥有一个包含 5
random 但唯一 元素的列表,这些元素是从 {{1} 中的可用元素中挑选出来的}.
因此,您可能更喜欢使用 gameManager.TaskList
循环
你可以在一行中使用
OrderBy
以 Random.value
作为订单标准Take
从已经随机化的枚举中选择前 while
个项目 → 因为它们已经随机化,您现在可以按顺序进行=> 您将获得 5 个随机的独特任务(或者,如果没有足够的可用任务,您只能获得现有数量 - 可以为 0)。
类似的东西
5