根据另一个数组列表的值对 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 数组列表进行排序的主要内容,如果未能解决你的问题,请参考以下文章