だから私は、アレイ持っていると言う:どのように私はから "A"、 "C"、 "E"、 "G"、および "I"(すべての偶数のインデックスを削除するか、今Swiftの配列内の他のすべての要素を削除するには?
var stringArray = ["a","b","c","d","e","f","g","h","i","j"]
をアレイ)?
ありがとうございます!
だから私は、アレイ持っていると言う:どのように私はから "A"、 "C"、 "E"、 "G"、および "I"(すべての偶数のインデックスを削除するか、今Swiftの配列内の他のすべての要素を削除するには?
var stringArray = ["a","b","c","d","e","f","g","h","i","j"]
をアレイ)?
ありがとうございます!
伝統
var filteredArray = []
for var i = 1; i < stringArray.count; i = i + 2 {
filteredArray.append(stringArray[i])
}
機能代替
var result = stringArray.enumerate().filter({ index, _ in
index % 2 != 0
}).map { $0.1 }
enumerate
要素のアレイを取得し、各タプルは、索引配列対(例えば(.0 3, .1 "d")
)であるタプルの配列を返します。モジュラス演算子を使用して奇数の要素を削除します。最後に、タプル配列をmap
を使って通常の配列に戻します。 HTH
代わりに(スウィフトの次期バージョンで廃止されるように設定されている)、ループのためにC-スタイルを使用して、あなたは、この使用して進歩を達成できます。
var result = [String]()
for i in 1.stride(to: stringArray.count, by: 2) {
result.append(stringArray[i])
}
またはそれ以上の機能ソリューションのために
がflatMap()
Oを使用して:、
let result = 1.stride(to: stringArray.count, by: 2).map { stringArray[$0] }
私は面白い発見がいくつかあり、これを達成するためにさまざまな方法の束がありますが、ここにありますN indices
:
let result: [String] = stringArray.indices.flatMap {
if $0 % 2 != 0 { return stringArray[$0] }
else { return nil }
}
注:[String]
のように定義することがresult
ニーズそうでない場合、コンパイラはflatMap()
のどのバージョンを使用することを知りません。
それとも、あなたが代わりに元の配列変更する場合:この場合
stringArray.indices.reverse().forEach {
if $0 % 2 == 0 { stringArray.removeAtIndex($0) }
}
を、あなたはそれらが逆の順序で列挙されているように、最初indices
にreverse()
を呼び出す必要があります。さもなければ配列の終わりに達する頃にはもう存在しないインデックスを削除しようとします。
このように配列全体を削除すると、インデックスの削除は本当に高価です。 – Alexander
ありがとうございます!私はenumerate()を学んだ。 –