gpt4 book ai didi

arrays - 搜索数组所有元素中的特定属性是否匹配条件

转载 作者:行者123 更新时间:2023-11-28 09:16:14 25 4
gpt4 key购买 nike

我正在使用 Swift、SpriteKit 和 Xcode 6,

我有一个 SKSpriteNode 类的数组:

class EnemyVehicle: SKSpriteNode {
}

var vehicles = [EnemyVehicle]()

所以我可以像这样向这个数组添加元素:

vehicles.append(EnemyVehicle(imageNamed:"mySprite"))

父类(super class) SKSpriteNode 包含一个属性 position.y,我可以使用 vehicle[x].position.y 在数组的每个元素中访问它。

我的问题是:是否可以测试数组中的每个特定属性(此处为 position.y)并观察它是否符合条件?例如,如果我想要一个仅当数组中所有元素的所有 position.y 值都大于 0 时才为真的条件?我知道我可以用一个循环来完成它,但是还有其他更简单的方法吗?

最佳答案

听起来你想要减少。

Reduce 获取一个起始值,然后是一个获取运行值和数组的下一个元素的闭包,并将这两个元素组合在一起,携带该结果与下一个元素组合。

例如:

let a = [1,2,3]
// starting with zero, add each element to a total
let sum = a.reduce(0) { total, i in total + i }
// sum = 6

要检查数组中的所有元素是否都符合给定条件,您需要一个组合函数来检查属性并返回 true 或 false,并将其与先前的条件相结合:

// assuming you’re ok for true for an empty array:
let allAboveGround = vehicles.reduce(true) {
previous, vehicle in
previous && vehicle.position.y > 0
}

这样做有一个缺点 - 一旦您遇到一个错误的值,您就可以就此停止,因为整体值不可能是真实的。 Reduce 不适合这种情况,因此您可能想要编写一个循环,或者一个包装循环的 all 函数,在这些条件下提前退出:

func all<S: SequenceType>(source: S, pred: S.Generator.Element->Bool) -> Bool {
for x in source {
if !pred(x) { return false }
}
return true
}

let allAboveGround = all(vehicles) { $0.position.y > 0 }

关于arrays - 搜索数组所有元素中的特定属性是否匹配条件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27557024/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com