TransWikia.com

Swiftで配列の要素をindex番号を使用せずにremoveする方法

スタック・オーバーフロー Asked on December 10, 2020

Swiftで配列から要素を削除したい場合、以下のようにremove(at)でindex番号を指定して削除できると思います。

var testArray = [0,5,3,4,2,1,7]
testArray.remove(at: 2)
print(testArray)

番号ではなく要素の中身で一致するものを見つけたら削除するということをしたい場合
以下のような関数を作ればできたのですが、関数を作らずに実行する方法はあるのでしょうか?
やはり、自前の関数を作ったほうが良いのでしょうか?

func removeElement(All_Array:[Int],SpecifyElement:Int) -> [Int]
{
    var returnArray = All_Array
    for (index, element) in All_Array.enumerated() {
        if element == SpecifyElement
        {
            returnArray.remove(at: index)
        }
    }
    return returnArray
}

var testArray = [0,5,3,4,2,1,7]
testArray = removeElement(All_Array: testArray,SpecifyElement: 4)
print(testArray)

2 Answers

初めにマッチした要素だけ消したいのであれば

var testArray = [0, 5, 3, 4, 2, 1, 7]
if let index = testArray.firstIndex(where: { $0 == 4 }) {
    testArray.remove(at: index)
}
print(testArray)

すべての一致する要素を消すのであれば、removeAll(where:) を使えばできます。

var testArray = [0, 5, 3, 4, 2, 1, 7]
testArray.removeAll(where: { $0 == 4 })
print(testArray)

removeFirst(where:)のようなメソッドは用意されていませんので、最初にマッチした要素だけ消したいのであれば、インデックスは指定することになると思います。

Correct answer by shingo.nakanishi on December 10, 2020

例えばですが、4を削除したい場合は

let newArray = testArray.filter { $0 != 4 }

としてみてはいかがでしょうか。

ただ、4が2つ以上ある場合、提示された関数版とは結果が異なってしまいますが。

Answered by Nao on December 10, 2020

Add your own answers!

Ask a Question

Get help from others!

© 2024 TransWikia.com. All rights reserved. Sites we Love: PCI Database, UKBizDB, Menu Kuliner, Sharing RPP