公開中のアプリ

[Swift]二つの配列を比較して同じ要素があれば削除する方法!

今回はInt型の配列を二つ用意して、同じ数字が入っていれば両方の配列からその数字を削除する方法について書きたいと思います!
需要があるかわからんけど、、、僕はババ抜きみたいなアプリを作る時に使いました!
先に全コードはこんな感じ!
もっと簡単にできるかもですが、、、

var num1 = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13]
var num2 = [1, 2, 13, 14, 5, 6, 7, 18, 9, 10, 111, 12, 13]
func hikaku() {
    for hikaku1 in num1 {
        for hikaku2 in num2 {
            if hikaku1 == hikaku2 {
                print("num1 \(hikaku1) num2 \(hikaku2)")
                
                if let  indexNum1 = num1.firstIndex(of: hikaku1) {
                    num1.remove(at: indexNum1)
                }
                if let  indexNum2 = num2.firstIndex(of: hikaku2) {
                    num2.remove(at: indexNum2)
                }
               
            }
        }
    }
}
hikaku()
print(num1)
print(num2)

配列を二つ作る。

まず二つの配列を作ります。
数字はこんな感じに適当に入れました。
この二つの配列で同じ数字があれば両方の配列から削除します。

var num1 = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13]
var num2 = [1, 2, 13, 14, 5, 6, 7, 18, 9, 10, 111, 12, 13]

比較する関数を作る。

二つの配列を比較する為の関数を作ります!
名前はわかりやすく「hikaku」としました。

func hikaku() {
   
}

for文で二重ループさせる。

2行目のfor文で配列num1をループさせます。
そのループの中で更に配列num2をループさせて比較しています。
4行目は比較した数字が同じだった場合この処理をして下さいと言うif文です。
5行目のprintはどの数字が同じだったかをわかりやすく示す為に書きました。
7行目からは同じ数字だった配列num1のインデックス番号をindexNum1に代入して次の行で削除しています。
配列num2も同じ処理をしています。

func hikaku() {
    for hikaku1 in num1 {
        for hikaku2 in num2 {
            if hikaku1 == hikaku2 {
                print("num1 \(hikaku1) num2 \(hikaku2)")
                
                if let  indexNum1 = num1.firstIndex(of: hikaku1) {
                    num1.remove(at: indexNum1)
                }
                if let  indexNum2 = num2.firstIndex(of: hikaku2) {
                    num2.remove(at: indexNum2)
                }
               
            }
        }
    }
}

for文の流れだけもう少し詳しく書いておきます。
下の画像で言うと、赤の矢印が左から順番に配列num2の最後まで比較して、その次に配列num1の二番目の青い矢印が同じように配列num2の最後まで比較して、次は緑の矢印と言う流れで比較しています。

上記のコードに戻って、for hikaku1 in num1の部分のhikaku1にはループで回ってる時の数字が代入されています。
最初に配列num1の数字1がhikaku1に代入されて、配列num2の数字1がhikaku2に代入されて、if文で比較しています。
この場合同じ数字1なので1は配列から削除されます。

関数を実行して結果を見てみる。

plyagroundで実行してみるとこうなります。
赤枠が削除された後の二つの配列が表示されています。
同じ数字は削除されていると思います。

もっと詳しく説明したい部分もあるんですけど、説明が難しいですね。

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

アプリ