質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
Xcode

Xcodeはソフトウェア開発のための、Appleの統合開発環境です。Mac OSXに付随するかたちで配布されています。

Swift

Swiftは、アップルのiOSおよびOS Xのためのプログラミング言語で、Objective-CやObjective-C++と共存することが意図されています

Q&A

解決済

2回答

1593閲覧

Swiftで異なる配列を比較して、要素が一致した時に次の処理に移りたい

NyoroNyoroKo

総合スコア17

Xcode

Xcodeはソフトウェア開発のための、Appleの統合開発環境です。Mac OSXに付随するかたちで配布されています。

Swift

Swiftは、アップルのiOSおよびOS Xのためのプログラミング言語で、Objective-CやObjective-C++と共存することが意図されています

0グッド

1クリップ

投稿2018/09/19 07:57

編集2018/09/19 07:58

こういうことをしたい

2つの配列AとBがあります。
Aはvar、Bはletとします(Aはたくさんあるボタンを押すごとにボタンのタグがIntとして追加されていくイメージ)
A = [1, 3, 7, 8, 15, 13, 24, 2, 5...]
B = [1, 2, 3]

ここで、AとBを比較した時に、AにもBにも1, 2, 3が要素として入っているので、
こんな感じで一致した時に次の処理に移れるようにしたいです。
Equatableやhashableを使うにもどうやったらいいのかよくわかりません。

該当のソースコード

Swift

1//中略 2 var testArray = [Int]() 3 4@IBAction func press(_ sender: Any) { 5  if let button = sender as? UIButton { 6 testArray.append(button.tag) 7 } 8//ここまではできるけど、その後どうやって質問内容をクリアしようかなと考えています。 9//比較対象の配列はStructとして別のファイルに置いています。

試したこと

調べてEquatableやHashableの存在まではたどり着いたけど、どうやって呼び出せばいいのかわからないです。

補足情報(FW/ツールのバージョンなど)

Xcode9.4.1
Swift4.1でやっています。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

MasakiHori

2018/09/19 08:12

A=Bの時に一致としたいのですか? B⊂Aの時に一致としたいのですか?
NyoroNyoroKo

2018/09/19 08:19

すみません、そこがわかりづらかったですが後者です。
guest

回答2

0

ベストアンサー

部分集合であれば、

Swift

1let a = [1, 3, 7, 8, 15, 13, 24, 2, 5] 2let b = [1, 2, 3] 3 4let aset = Set(a) 5let bset = Set(b) 6 7print("bはaの(bset.isSubset(of: aset) ? "サブセットである" : "サブセットではない")") 8

投稿2018/09/19 08:36

daisuke7

総合スコア1563

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

NyoroNyoroKo

2018/09/19 08:47

こちらの回答の通りSetとSubsetで一度試しました。 作りたいものがビンゴゲームのカードなので助かりました。
guest

0

すでに答え出てますが、一応Bの要素に重複を許す場合は

swift

1let a = [1, 3, 7, 8, 15, 13, 24, 5] 2let b = [1, 2, 3] 3 4if a.filter(b.contains).sorted() == b.sorted() { 5 print("OK") 6} 7 8 9// Bの要素に重複がないことが確定しているならBは初めからSet<Int>にする 10let uniqueB: Set<Int> = [1, 2, 3] 11if uniqueB.isSubset(of: a) { // 引数の型はSequenceなので Array<Int>のままでOK 12 print("OK") 13}

下のはArray<Int>からSet<Int>への変換コストを嫌って変換不要にしました。

投稿2018/09/19 08:47

MasakiHori

総合スコア3384

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

NyoroNyoroKo

2018/09/19 08:49

こちらもありがとうございます。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問