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

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

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

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

Q&A

解決済

1回答

2372閲覧

配列内で条件にマッチする最後の要素のインデックスを取得するよい方法はありますか?

退会済みユーザー

退会済みユーザー

総合スコア0

Swift

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

0グッド

0クリップ

投稿2020/04/22 07:55

編集2020/04/22 08:04

class AにはEquatableを適用するような要素がないのでobject同士の比較ができないのですが、このようなAの配列arrayからA.type == .fugaな要素の最終インデックスをダイレクトに取得する方法はありますか?

swift

1 2enum Type { 3 case hoge 4 case fuga 5} 6 7class A { 8 9 var type: Type 10 11 init(_ type: Type) { 12 self.type = type 13 } 14} 15 16var array = [A]() 17 18array = [A(.hoge), A(.fuga), A(.hoge), A(.fuga), A(.hoge)] 19

現状、forEachenumuratedをつかって最終インデックスを取得するしかないのかな?と思ってます。

swift

1var indexes = [Int]() 2 3array.enumerated().forEach { if ($0.element.type == .fuga) { indexes.append($0.offset) } } 4 5print(indexes.last as Any) 6

備忘録

swift

1let lastIndex: Int? = array.lastIndex(where: { $0.type == .fuga })

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

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

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

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

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

guest

回答1

0

ベストアンサー

そのものずばりのメソッドがあります。

条件に適合する最後のインデックスを取り出す。
lastIndex(where:)

条件に適合する最後の要素を取り出す。
last(where:)

投稿2020/04/22 07:59

MasakiHori

総合スコア3391

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

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

退会済みユーザー

退会済みユーザー

2020/04/22 08:07 編集

ありがとうございます。 自分の位置を変えて最後のインデックスを求めたい場合は、arrayをスライス?してからlastIndex(where:)が近道でしょうか。
MasakiHori

2020/04/22 14:31

すみません。「自分の位置を変えて」の意味が分からないです。
退会済みユーザー

退会済みユーザー

2020/04/23 04:01

返信ありがとうございます。 配列全体から見て一番最後でなく、 例えば、インデックス2以下で、.fugaな要素の最大インデックスを取得する場合は、arrayを部分抽出してからlastIndex(where:)なのか、他に方法があるのかと思いまして。
MasakiHori

2020/04/23 06:10

Arrayの部分配列としてArraySliceというstructがあります。 ちょっとややこしいのですが、このArraySliceは元のArrayのindexに従っているのでArraySliceのlastIndexを取得するとそのindexは元のArrayのindexと同じになります。 let a = Array(0...<10) // 0から9までの整数の配列 let i = a[5...6] // indexが5から6のArraySlice .lastIndex { $0.isMultiple(of: 2) } // その中で最後の偶数の要素のindex // i はOptional(2)ではなくOptional(6)
退会済みユーザー

退会済みユーザー

2020/04/23 06:30

返信ありがとうございます。 例示が的確で、疑問点が一気に解消できました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.35%

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

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

質問する

関連した質問