2015-08-19 47 views
1

我有一個CGPoint數組(spritePositions),我想用選定數量的位置創建SKSpriteNode(留下特定的索引)。請參閱下面的代碼:如何過濾/排除CGPoint數組中的某些索引

CreateSprite(missingIndexes: [int]) { 

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

有一個稱爲過濾器的高階函數可以在數組上工作 –

回答

0

您可以使用missingIndexes數組上的contains函數篩選出您的索引。如果索引不像平常那​​樣包含在你的missingIndexes進程中。如果索引包含在missingIndexes中,則不執行任何操作。

夫特1.2:

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

夫特2.0

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

夫特1.2:

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

通過過濾得到的列表指數

for object in filteredObjects { 
    print(object) 
} 

使用,在一個循環

不一定做到這一點的最好辦法,只是使用過濾器的方式,這將讓你保持過濾的數組,如果你以後需要它。

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) 
}) 

這比missingIndexes陣列上重複調用contains更有效。

相關問題