如何从CGPoint数组中过滤/排除某些索引

时间:2015-08-19 16:45:00

标签: arrays swift

我有一个CGPoints数组(spritePositions),我想用选定数量的位置创建SKSpriteNode(留下out的特定索引)。请参阅以下代码:

CreateSprite(missingIndexes: [int])    {

    //for (index, value) in enumerate(spritePositions)  filtering out/excluding missingIndexes array {
         var sprite = SKSpriteNode(imageNamed: "spriteImage")
         sprite.position = value
         addChild(sprite)
     }
}

3 个答案:

答案 0 :(得分:0)

您可以使用missingIndexes数组中的contains函数来过滤掉索引。如果索引未正常包含在missingIndexes进程中。如果索引包含在missingIndexes中,则不执行任何操作。

Swift 1.2:

for (index, value) in enumerate(spritePositions) {
    if !contains(missingIndexes, index) {
        var sprite = SKSpriteNode(imageNamed: "spriteImage")
        sprite.position = value
        addChild(sprite)
    }
}

Swift 2.0

for (index, value) in spritePositions.enumerate() {
    if !missingIndexes.contains(index) {
        var sprite = SKSpriteNode(imageNamed: "spriteImage")
        sprite.position = value
        addChild(sprite)
    }
}

答案 1 :(得分:0)

Swift 1.2:

var filteredObjects = spritePositions.filter { !contains(missingIndexes, find(spritePositions, $0)!)}

通过过滤索引来获取列表

for object in filteredObjects {
    print(object)
}

在循环中使用它

不一定是最好的方法,只是使用过滤器的一种方式,这将允许您在以后需要时保留过滤后的数组。

答案 2 :(得分:0)

另一种选择是使用Set类型和map函数的组合。以下代码段适用于Swift 1.2。

let missingIndexes: [Int] = ...
let spritePositions: [CGPoint] = ...

map(Set(0 ..< count(spritePositions)).subtract(missingIndexes), { index -> Void in
    var sprite = SKSpriteNode(imageNamed: "spriteImage")
    sprite.position = spritePositions[index]
    addChild(sprite)
})

这比在contains数组上重复调用missingIndexes更有效。