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

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

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

Android Studioは、 Google社によって開発された、 Androidのネイティブアプリケーション開発に特化した統合開発ツールです。

Kotlin

Kotlinは、ジェットブレインズ社のアンドリー・ブレスラフ、ドミトリー・ジェメロフが開発した、 静的型付けのオブジェクト指向プログラミング言語です。

Q&A

解決済

2回答

3725閲覧

kotlin:降順ソートして大きいほうからindexを取得するには?

yuko0524

総合スコア28

Android Studio

Android Studioは、 Google社によって開発された、 Androidのネイティブアプリケーション開発に特化した統合開発ツールです。

Kotlin

Kotlinは、ジェットブレインズ社のアンドリー・ブレスラフ、ドミトリー・ジェメロフが開発した、 静的型付けのオブジェクト指向プログラミング言語です。

0グッド

0クリップ

投稿2018/12/18 08:14

前提・実現したいこと

ある配列に数値が入っており、降順に並べたときに、それぞれのindexを取得したいです。
最大値、最小値は出せますが、その間の数値をどのように求めたらいいのか、
うまい解決方法がみつかりません。

index[0,1,2,3,4]
配列に入っている数値[-80,-72,-84,-80,-81]
とした場合、
降順にソートすると、[-72,-80,-80,-81,-84]となるので、
それぞれのindexを、[1,0,3,4,2]というように取得したいです。

ご教示よろしくお願いします。

発生している問題・エラーメッセージ

エラーメッセージ

該当のソースコード

kotlin

1val indexRssi: Int = getRssiList.indexOf(getRssiList.max()) 2 Log.d("max_index", "$indexRssi" ) 3 4Logcat には max_index: 1 5このように最大値のみしか出力できていません… 6

試したこと

ここに問題に対して試したことを記載してください。

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

Kotlin バージョン: 1.2.71

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

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

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

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

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

guest

回答2

0

YamakawaJunichiさんの回答で問題なく動くと思いますが、 withIndex を使えばよりコードの意図が明確になると思います。

kotlin

1val list = listOf(-80,-72,-84,-80,-81) 2 3val sortedIndices = list.withIndex() 4 .sortedByDescending { it.value } 5 .map { it.index }

投稿2018/12/18 09:09

kakajika

総合スコア3131

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

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

yuko0524

2018/12/18 23:19

ありがとうございます。処理をイメージしやすいコードですね。 色々なやり方はあるのでしょうが、ネットを拾っても自分流にアレンジできずに おりました。お付き合いいただき本当にありがとうございました。 おかげ様で使い方を習得できました。
guest

0

ベストアンサー

こんなのでいかがでしょう

Kotlin

1val list = listOf(-80,-72,-84,-80,-81) 2 3list.mapIndexed { index, value -> index to value } 4 .sortedByDescending { it.second } 5 .map{it.first} 6 .forEach { print(it) } 7 8// 10342

投稿2018/12/18 08:33

YamakawaJunichi

総合スコア630

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

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

yuko0524

2018/12/18 09:01

早々にご回答いただき、誠にありがとうございます。助かりました。 まだKotlinに不慣れで、ご教示いただいたようなすっきりしたコードには程遠く・・・、 失礼ながらもう少しお伺いさせてください。 second,firstが意味していること、it に入ってくるインデックスの値を1つ1つ別の変数に取りたい場合のコーディングはどのようになりますでしょうか。重ね重ね申し訳ありません。よろしくお願いします。
YamakawaJunichi

2018/12/18 09:19

index to valueの「to」は前後の値を引数としてPairクラスのインスタンスを返す演算子です。 Pairはfirst・secondというふたつのプロパティを持つdata classです。 mapIndexed はlistを値とインデックスのペアに変換 sortedByDescending は値で逆順ソート map は値とインデックスのペアをインデックスのみに変換 ということをしています。 mapの返り値がListなのでこれを変数に取ってあげればそれぞれの値にアクセスできます。
yuko0524

2018/12/19 02:47

丁寧にご説明いただきまして本当にありがとうございます。 処理している内容は読み取ることができました。 オープンソースに精通しておらず、質問が稚拙で申し訳ありませんが、 まだ理解不足な点がございます。 返り値のListを変数に取る場合ですが、Listに入っている数が5つ限定とした場合、 変数a1,a2,a3,a4,a5に対し、それぞれ降順のindexをa1から順にセットしたいと考えています。 これを実現するにはどのような書き方がベストでしょうか。
YamakawaJunichi

2018/12/19 03:06

愚直に書くなら val a1 = indexList[0] val a2 = indexList[1] ・・・と入れていけば良いと思います。 わざわざ変数に取らなくて良いならインデクサー([]のこと)のアクセスだけで良いでしょう。
yuko0524

2018/12/20 03:01

ありがとうございました。 おかげさまでやりたいことが実現できました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問