2017-01-09 1 views
0

Есть ли более быстрый/более сжатый способ получить несколько индексов из массива, кроме циклов и добавления? Может быть, однострочный функциональный вариант следующего?Более быстрый способ получить несколько элементов из массива в Swift?

let names: [String] = ["John", "Mary", "Hugo", "Bill", "Andrea"] 
let indexesToGet = [0, 1, 3] 
var result: [String] = [] 
for i in 0..<indexesToGet.count { 
    result.append(names[indexesToGet[i]]) 
} 
return result 
//returns ["John", "Mary", "Bill"] 
+2

Код, который вы отправили, не имеет большого смысла. Фактически вы не используете числа в 'indexesToGet'. – rmaddy

+1

Как сказал rmaddy 'result.append (names [i])' должен быть 'result.append (names [indexToGet [i]]), и вывод будет' ["John", "Mary", "Bill"] ' –

+1

Связанный: [Фильтровать по индексам] (http://stackoverflow.com/questions/40264624/filter-array-by-indices). –

ответ

2

Вы можете попробовать вот так.

let result = indexesToGet.map { names[$0] } 

Чтобы Препятствует indexOutOfBounds аварии вы можете использовать flatMap.

let result = indexesToGet.flatMap { (names.count > $0) ? names[$0] : nil}