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

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

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

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

Q&A

解決済

1回答

1729閲覧

多次元配列の中身を条件指定して選んでそのインデックス番号を取得したい

okkyu

総合スコア18

Swift

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

0グッド

0クリップ

投稿2020/02/05 14:24

多次元配列arrの中身を条件を指定して選びそのインデックス番号を取得したいです。条件は
1.配列全ての[1]番目の要素が5よりも大きい
2.上の条件に一致した配列が複数あったら[0]番目の要素が大きい方を選ぶ。要素が同じ値だった場合、[1]番目が小さい方の配列(下記の場合だと[8,6])を選ぶ
この条件で選んだ配列のインデックス番号を求めたいのですがどのようにすればよいかわからず困っております。何か良い方法はないでしょうか?ご回答頂けましたら幸いです。説明が下手くそで申し訳ありません。

swift

1let arr = [[8, 10], [8, 6], [7, 4]] 2

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

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

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

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

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

guest

回答1

0

ベストアンサー

標準メソッドを組み合わせるとこんな感じでしょうか。

Swift

1var arr = [[8, 10], [8, 6], [7, 4]] 2 3// [1]が5より大きいものを抜き出したのち、条件にあう要素を見つける 4let max: [Int] = arr.filter{$0[1] > 5}.reduce([0,0]) { 5 if $0[0] == $1[0] { 6 if $0[1] < $1[1] { 7 return $0 8 } else { 9 return $1 10 } 11 } else if $0[0] < $1[0] { 12 return $1 13 } else { 14 return $0 15 } 16} 17// 条件にあう要素を抽出 18print(max) 19 20// 条件にあう要素がある最初のインデックス番号を抽出 21print("最初のインデックス番号は: ", arr.firstIndex(of: max)!)

ただし、空配列などのチェックは全く考慮していないので、その辺りは必要に応じて実装が必要かと思います。

詳解Swift第5版 CHAPTER13:ジェネリクスのreduce項あたりを参考にしました。

投稿2020/02/05 15:30

TsukubaDepot

総合スコア5086

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

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

okkyu

2020/02/06 06:18

ご回答ありがとうございます。reduceは合計出すことでしかまだ使ったことなかったのでとても参考になりました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.35%

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

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

質問する

関連した質問