【发布时间】:2017-05-25 12:39:58
【问题描述】:
我不喜欢我对surroundingPositions 的以下实现来获取围绕特定位置的 x 和 y 坐标,因为在我看来,它对于简单的意图来说太长了,而且它有一个厄运金字塔结构。
struct Position: CustomStringConvertible {
let x, y: Int
var surroundingPositions: [Position] {
var surroundingPositions: [Position] = []
for x in (self.x - 1)...(self.x + 1) {
for y in (self.y - 1)...(self.y + 1) {
if !(x == self.x && y == self.y) {
surroundingPositions.append(Position(x: x, y: y))
}
}
}
return surroundingPositions
}
var description: String {
return "(\(x),\(y))"
}
}
用法:
let testPosition = Position(x: 1, y: 1)
print(testPosition.surroundingPositions)
// Output: [(0,0), (0,1), (0,2), (1,0), (1,2), (2,0), (2,1), (2,2)]
实现相同(正确)结果的最短方法是什么?我在想map、filter、reduce等函数,但目前还没有找到合适的组合...
【问题讨论】: