当前情况
我有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/