2017-01-09 10 views
0

ループのほかに配列から複数のインデックスを取得し、追加する方が速く/簡潔な方法がありますか?たぶん、次の1ライナーの機能的な変種でしょうか?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

このように試すことができます。あなたがflatMapを使用することができますindexOutOfBoundsクラッシュから防ぐことができ

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

let result = indexesToGet.flatMap { (names.count > $0) ? names[$0] : nil} 
関連する問題