2016-02-28 2 views
-1

У меня есть массив с элементами, и массив с индексами, чтобы удалить из первого массива:создать массив из выбранных элементов в массиве Плодовые пунктов

var array = ["a", "b", "c", "d", "e", "f", "g", "h", "i"]  
let indicesToDelete = [4, 8] 

let reducedArray = indicesToDelete.reverse().map { array.removeAtIndex($0) } 
reducedArray // prints ["i","e"] 

Что делать, если мой массив выглядит следующим образом:

class Fruit{ 
let colour: String 
let type: String 
init(colour:String, type: String){ 
    self.colour = colour 
    self.type = type 
    } 
} 

var arrayFruit = [Fruit(colour: "red", type: "Apple"),Fruit(colour: "green", type: "Pear"), Fruit(colour: "yellow", type: "Banana"),Fruit(colour: "orange", type: "Orange")] 
let indicesToDelete = [2,3] 

Если я просто использую вышеуказанный код, я получаю сообщение об ошибке.

let reducedArray = indicesToDelete.reverse().map { arrayFruit.removeAtIndex($0) }////// error here 

Мои вопросы о том, что fruitArray сделана из объектов, и я не знаю, как настроить код в строке выше.

ответ

1

Уменьшенный массив не является результатом map, но исходный массив, то есть arrayFruit. Я хотел бы предложить не используя map но forEach, и написать это:

class Fruit{ 
    let colour: String 
    let type: String 
    init(colour:String, type: String){ 
     self.colour = colour 
     self.type = type 
    } 
} 

var arrayFruit = [Fruit(colour: "red", type: "Apple"),Fruit(colour: "green", type: "Pear"), Fruit(colour: "yellow", type: "Banana"),Fruit(colour: "orange", type: "Orange")] 
let indicesToDelete = [2,3] 

indicesToDelete.sort(>).forEach { arrayFruit.removeAtIndex($0) } 
arrayFruit // [{colour "red", type "Apple"}, {colour "green", type "Pear"}] 
+0

жаль, Мэтт, я не достаточно специфичны. в fruitArray я просто хочу удалить, например. item 1 (Apple) – kangarooChris

+0

ну, вы правы, это работает, и я люблю forEach лучше, так как я могу понять это лучше, чем карта – kangarooChris

Смежные вопросы