基于 kotlin 中的另一个 ArrayList 对 ArrayList 进行排序

Mah*_*iya 2 sorting list kotlin

String我有以下清单:-

val a = listOf("G", "F", "E", "D", "C", "B", "A")
Run Code Online (Sandbox Code Playgroud)

我将从服务器获取另一个列表。例如:-

val b = listOf("A", "G", "C")
Run Code Online (Sandbox Code Playgroud)

来自服务器的列表可能包含更少或更多元素,但不会包含除第一个列表之外的元素。

所以,排序后输出应该是这样的

// G、C、A

cut*_*iko 5

你不是在尝试排序,而是在尝试过滤

fun filterByServer(server: List<String>, local: List<String>)
        = local.filter { value -> server.contains(value) }
Run Code Online (Sandbox Code Playgroud)

filter如果您的本地值包含在服务器列表中,则在这种情况下采用谓词


The*_*ehT 5

您可以在没有重复的情况下轻松使用map和来实现 -sorteda

val a = listOf("G", "F", "E", "D", "C", "B", "A")
val b = listOf("A", "G", "C")
val there = b.map{ v -> a.indexOf(v)}.sorted().map{v -> a[v]}
println(there)
Run Code Online (Sandbox Code Playgroud)

输出:: [G, C, A]

@jsamol 在评论中指出的替代排序方式 -

val there = b.sortedBy { a.indexOf(it) }
Run Code Online (Sandbox Code Playgroud)

  • 我不同意越短的代码越好:排序通常会进行“O(N*logN)”比较,其中 N 是排序列表中的项目数,并且对于每个比较,它需要执行两个“a.a”。 indexOf(it)` 操作,它们本身是 `O(M)`,其中 M 是第一个列表中的元素数量。因此最终的复杂度将是“O(N*logN*2M)”。原始的映射索引方法的复杂度仅为“O(N*(M + logN + 1))”。对于大型列表,这种差异可能很大。 (2认同)