android-studio - 从kotlin中另一个arraylist的值对arraylist进行排序

标签 android-studio kotlin

当前情况
我有3个arraylist

name = [a,b,c,a]
age = [2,3,5,6]
score = [3,4,4,1]
结果我想要
name = [b,c,a,a]
age = [3,5,2,6]
score = [4,4,3,1]
我认为使用 map 会很有用,但是在完成score.map{v -> index}后我感到困惑:|

最佳答案

我假设您的值都像表一样属于彼此,例如:

        | name | age | score
------------------------------
index 0 |  a   |  2  |   3
index 1 |  b   |  3  |   4
index 2 |  c   |  5  |   4
index 3 |  a   |  6  |   1
您想按score列对其进行排序。
有多种方法可以解决此问题,因此我将在下面显示我最喜欢的一种方法。
使用数据类
声明数据类
为此,最好声明一个简单的数据类,充当三个变量的包装器。 (您也可以使用预定义的Kotlin类Triple)
data class User(val name: String, val age: Int, val score: Int)
...创建一个适合您需求的简单数据类。数据类的每个实例
代表一个索引处(上表的一行)所有三个数组列表的值。
转换 list
要将三个列表转换为User类的实例,可以使用Kotlin扩展函数mapIndexed,该函数将列表转换为另一种类型的列表,同时为我们提供元素及其索引,我们需要在其中访问适当的值其他列表。
val users = name.mapIndexed { index, value -> User(value, age[index], score[index]) }
现在,我们有一个看起来像这样的用户列表:
[User(name=a, age=2, score=3), User(name=b, age=3, score=4), User(name=c, age=5, score=4), User(name=a, age=6, score=1)]
排序 list
现在,我们可以简单地追加sortedByDescending函数来对其进行降序排序:
val usersSorted = name.mapIndexed { index, value -> User(value, age[index], score[index]) }.sortedByDescending { it.score }
如果要存储一个对象的两个以上的值,最好总是使用类,尤其是在这种情况下。
返回原始 list
如果(仍然)仍然需要原始列表,则可以使用map函数将其取回。但是请注意,这种形式的数据不是很方便。
val name = users.map { it.name }
val age = users.map { it.age }
val score = users.map { it.score }

关于android-studio - 从kotlin中另一个arraylist的值对arraylist进行排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62839446/

相关文章:

android - 为什么我不能在 Android Studio 中同时使用这两个测试 Artifact ?

java - 在 Android Studio 中更改作者模板

kotlin - copyOfRange 中 Unresolved 引用错误

android - 无法在Android Studio 1.0 RC中删除构建类型

java - 如何在抽屉导航中提供 SettingsActivity?

android - Android Studio Webview打开链接直接在Google Play上

generics - 比较 Kotlin 中的可比对象列表

kotlin,如何将扩展功能添加到已定义的类伴随对象

android - 使用导航组件时如何设置对话框的目标 fragment

kotlin - 在 Kotlin 中将 List 转换为 Pair 的惯用方法