完全透露,这是一个家庭作业问题:
它应该有一个 [Circle] 类型的私有属性。一系列圆圈。
该方法应删除半径大于的任何圆
最小要求,并且小于最大要求。
看来我应该使用removeAtIndex()
删除不满足循环中确定的条件的数组项。然而,许多人之前已经指出了删除循环中的项目的危险,因为我猜是“迭代器/索引不匹配”。
最终我最终创建了一个空数组并使用.append()
将满足“良好”条件的值推至filteredCircles
数组,但我忍不住觉得这不符合作业的标准。
是否有一种解决方案实际上可以在循环中从数组中删除项目?
If the FOR LOOP
is not强制性的(我在引用的文本中没有看到这个要求)你应该使用filter
method.
当你调用filter
在数组上你会得到新数组仅包含尊重您传递给的闭包的值filter
. 原始数组没有发生变化。
struct Circle {
let radius: Double
}
let circles = [Circle(radius: 1), Circle(radius: 5.1), Circle(radius: 4), Circle(radius: 10.8)]
let bigCircles = circles.filter { $0.radius > 5 }
为什么这种方法比在 FOR 循环中改变数组更好
- Since
circles
是一个常数,你不会遇到与多线程编程. If circles
是可变的,那么当你循环它时其他线程可能会改变它,并产生非常可怕的副作用。
- It's 不易出错。您不是在写 CPU 应该做什么,而是在描述结果应该如何。这样你和编译器之间潜在的误解就会减少:)
- 你正在写更少的代码这确实意味着更少的潜在错误。
这些是编写函数式编程代码的一些好处。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)