这个问题与编程逻辑有关,而不是编程本身。 我目前正在编写一个包含两个列表的程序;一个用于人(带有人物),另一个用于礼物(书籍,电影等)
简而言之,该计划旨在将所有礼物送到人员名单(包括是否接受礼物的代码。如果是:礼物消失,如果不是:礼物保存给下一个人)。
我的问题如下:我是否通过人员列表(外部循环)然后遍历礼物(内部循环)以确定某人是否想要该特定礼物是否重要?或者我必须先穿过礼物(外部)然后循环通过每个人(内部)以查看是否有人接受了一件礼物?
因此,我必须使用替代(A)或(B)的结构(这里以伪代码提供),我如何知道哪个最好?
(A)
for (list of people) {
for(list of gifts) {
//Se if person wants gift
}
}
(B)
for (list of gifts) {
for(list of people) {
//Se if gift is accepted by a person
}
}
答案 0 :(得分:0)
只有在某些情况下你break
其中一个循环才有意义。在那种情况下,我会将break
放在预期会更长的那个上。这个较长的列表将是内部列表(因为如果你break
另一个列表是你break
整个事件。
答案 1 :(得分:0)
除了其他答案之外,具体做什么“简而言之,该计划旨在将所有礼物送到人员名单(包括是否接受礼物的代码。如果是的话:礼物消失,如果没有:为下一个人保存礼物。)“完全意味着 - 根据给定条件,礼品列表在遍历用户时是否会被修改?如果这是真的,我会将礼物作为外循环遍历,因为在非最坏的情况下,每次删除的礼物都会减少遍历用户列表大小的遍历列表,同时首先遍历用户并在内循环中决定是否申请礼物,无论礼物与否,都会遍历用户列表。
答案 2 :(得分:0)
使用哪种顺序并不重要,或者没有。人是外循环还是没有。礼物是外循环,无论如何,itterations和复杂性将保持不变。
答案 3 :(得分:0)
我不同意大多数答案暗示的原则,即订单不影响绩效。当然,在这样一个非常小的案例中,只有50人和200件礼物,差别可以忽略不计。但考虑一个更极端的情况,有2个人和1,000,000个礼物。
在两个选项中嵌套循环内部完成相同的计算工作可能是正确的,但管理嵌套循环的计算内容保持不同。即使根据礼物接受度提前摆脱循环可能实现的优化,也可以通过将具有较少值的变量作为外循环来提高性能。