web-dev-qa-db-ja.com

Swift配列から複数のアイテムを削除するにはどうすればよいですか?

たとえば、私は配列を持っています

var array = [1, 2, 3, 4]

インデックス1、次にインデックス3のアイテムを「forループに入れて」削除したいと思います。

ただし、インデックス1のアイテムを削除すると、インデックス3のアイテムがインデックス2に移動するため、2番目の削除が台無しになります。

助言がありますか ?

14
Raffi

あなたの配列を考えると

var numbers = [1, 2, 3, 4]

削除するインデックスのSet

let indexesToRemove: Set = [1, 3]

値「2」と「4」を削除します。

書くだけ

numbers = numbers
    .enumerated()
    .filter { !indexesToRemove.contains($0.offset) }
    .map { $0.element }

結果

print(numbers) // [1, 3]
26
Luca Angeletti

簡単だ。最後からアイテムを削除します。

最初に3を削除し、その後1を削除します

10
Seifolahi

Swift 3: Swiftクロージャを使用して、同じ操作を実行します。

あなたの配列が次のような場合

var numbers = [0, 1, 2, 3, 4, 5]

削除するインデックス

let indexesToBeRemoved: Set = [2, 4]

numbers = numbers
    .enumerated()
    .filter { !indexesToRemove.contains($0.offset) }
    .map { $0.element }
and result

print(numbers)// [0、1、3、5]

Swift 3:これはJSONオブジェクト(辞書)での同じ操作です

var arrayString = [
    [ "char" : "Z" ],
    [ "char" : "Y" ],
    [ "char" : "X" ],
    [ "char" : "W" ],
    [ "char" : "V" ],
    [ "char" : "U" ],
    [ "char" : "T" ],
    [ "char" : "S" ]
]

let arrayIndex = [2, 3, 5]

arrayString = arrayString.enumerated()
    .filter { !arrayIndex.contains($0.0 + 1) }
    .map { $0.1 }

print(arrayString)

[["char": "Z"]、["char": "W"]、["char": "U"]、["name": "T"]、["name": "S"] ]

0
Krunal