【问题标题】:Sort Kotlin arraylist based on values of another arraylist根据另一个数组列表的值对 Kotlin 数组列表进行排序
【发布时间】: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)]));

【问题讨论】:

    标签: android arrays sorting kotlin arraylist


    【解决方案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)
          }
      

      【讨论】:

        猜你喜欢
        • 2020-09-08
        • 1970-01-01
        • 2022-01-18
        • 1970-01-01
        • 2011-09-30
        • 1970-01-01
        相关资源
        最近更新 更多