android-studio - 根据kotlin中另一个arraylist的值对arraylist进行排序
问题描述
目前的情况,
我有 3 个数组列表
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]
我认为使用地图会很有用,但做了之后我感到困惑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)
... 创建一个满足您需求的简单数据类。数据类的每个实例代表一个索引处所有三个数组列表的值(上表中的一行)。
转换列表
要将您的三个列表转换为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)]
对列表进行排序
我们现在可以简单地附加该sortedByDescending
函数以按降序对其进行排序:
val usersSorted = name.mapIndexed { index, value -> User(value, age[index], score[index]) }.sortedByDescending { it.score }
如果要存储一个对象的两个以上的值,最好使用类,尤其是在这种情况下。
返回原始列表
map
如果您(不知何故)仍然需要原始列表,您可以使用该函数取回它们。但请注意,这种形式的数据不是很方便。
val name = users.map { it.name }
val age = users.map { it.age }
val score = users.map { it.score }
推荐阅读
- javascript - 如何使标签栏粘在页面底部?
- firebase - 如何从firestore中检索经纬度?
- plugins - 在 TYPO3 v10.4 中获取当前 pageid
- java - 访问多维字符串数组时在Java中获取ArrayIndexOutOfBoundsException
- unity3d - 自上而下或等距视图中的 Unity Frostrum Culling
- c - 程序在执行通过管道和 fork 给出的 shell 命令期间挂起
- machine-learning - 'TFOptimizer' 对象没有属性 'learning_rate'
- r - 在deseq中如何克服收缩?
- reactjs - 如何处理预检请求?
- php - 通过 AppServiceProvider.php 添加到视图时层次结构类别菜单中断