如何根据 Kotlin 中的另一个数组列表对 Arraylist<String >进行排序<String>



在我的应用程序中,我有 2 个数组列表。一个来自服务器,另一个来自资产。 我想根据 Kotlin 中资产数组列表的顺序对服务器数组列表进行排序。 e.g. val serverArraylist= { "xyz", "abc", "pqr"} val assetsList = { "abc", "pqr", "xyz"}

预期输出应为, serverArraylist = { "abc", "pqr", "xyz"}

这两个列表可能并不总是包含相同数量的元素。有时服务器列表可能包含较少的元素,但不会包含本地列表以外的元素。 喜欢 serverList= {xyz, pqr} 那么预期的列表应该是, severList= {pqr, xyz}

任何帮助或想法都非常感谢。提前谢谢。

val a = listOf("xyz","abc" ,"pqr" )
val b = listOf("abc" ,"pqr", "xyz")
val c = a + b
val d = c.distinct().sorted()

这会给你

[abc, pqr, xyz]

我过去遇到过类似的问题,列表 A 的排序基于列表 B 的排序。我认为如果列表大小不同,它不会起作用。否则,您需要控制排序中的"swap"方法,以便在交换列表 B 元素时,列表 A 中的元素也是如此。我不知道在 Kotlin 排序方法中覆盖它的方法,所以过去我编写了自己的气泡排序方法并在两个地方交换。其他海报给出了这个可能会有所帮助:使用比较器和交换功能的java排序

serverArraylist只包含元素也包含在assetsList中时,你不需要对任何列表进行排序。您唯一需要做的就是过滤assetsList以仅包含serverArraylist的元素。

assetsList.filter { it in serverArraylist }

您可以清除 serverArrayList,然后将 assetsList 中的所有元素添加到 serverArrayList。

如果您不熟悉 ArrayList 操作,可以在此处找到更多信息。

编辑:我很抱歉。我最初不明白你的问题。您可以使用哈希映射来帮助您跟踪所需的索引和 serverArrayList 元素。该过程应该是这样的:

  1. 迭代服务器阵列列表
  2. 对于 serverArrayList 中的每个元素,使用 indexOf(( 从 assetsList 中获取其对应的索引。
  3. 将每一对(索引、元素(放入哈希映射中。
  4. 使用哈希映射填充新的服务器数组列表。

注意越界错误,因为获得的索引可能大于 serverArrayList 的大小,因为您提到它的大小可能小于 assetsList。

相关内容

最新更新