根据另一个数组列表的值对 Kotlin 数组列表进行排序

Posted

技术标签:

【中文标题】根据另一个数组列表的值对 Kotlin 数组列表进行排序【英文标题】:Sort Kotlin arraylist based on values of another arraylist 【发布时间】:2021-10-31 13:46:51 【问题描述】:
arr[0] = Name(id=122, title="title0")
arr[1] = Name(id=123, title="title1")
arr[2] = Name(id=124, title="title2")
......

我需要用下面的数组对其进行排序

arrRef[0] = "title2"
arrRef[1] = "title0"
arrRef[2] = "title1"

结果:

arr[0] = Name(id=124, title="title2")
arr[1] = Name(id=122, title="title0")
arr[2] = Name(id=123, title="title1")
......

在java中我们这样做

Collections.sort(arrRef, Comparator.comparing(s -> arr[arrRef.indexOf(s)]));

【问题讨论】:

【参考方案1】:

如果你的名字列表真的很长,你应该将标题散列到它的索引,因为重复调用list.indexOf(value)对于长列表效果很差。

val names = arrayListOf(
    Name(122, "title0"),
    Name(123, "title1"),
    Name(124, "title2")
)

val titles = listOf(
    "title2",
    "title0",
    "title1"
)

val hash = titles.withIndex().associateTo(HashMap())  it.value to it.index 

names.sortBy  hash[it.title] 

【讨论】:

【参考方案2】:

我用

创建了两个数组列表
   val arr = arrayListOf(
        Name(122, "title0"),
        Name(123, "title1"),
        Name(124, "title2")
    )

    val arrRef = arrayListOf(
        "title2",
        "title0",
        "title1"
    )

并使用 sortBy 扩展函数对 arr 列表进行排序

    arr.sortBy  name ->
        arrRef.indexOf(name.title)
    

【讨论】:

以上是关于根据另一个数组列表的值对 Kotlin 数组列表进行排序的主要内容,如果未能解决你的问题,请参考以下文章

无法将元素添加到 kotlin 中可变列表的数组数组

将数组列表附加到数组并在 kotlin 中重复此操作

列表的所有的input,将它的值以键值对的形式存放到一个数组里

从 Kotlin 中的列表或哈希映射数组列表中拆分字符串

根据另一列中的值更新 BigQuery 中的嵌套数组

基于Java中另一个arraylist中的对象值对arraylist进行排序