kotlin,如何根据子列表的位置获取子列表

kotlin,如何根据子列表的位置获取子列表,kotlin,filter,Kotlin,Filter,有清单 val list = toList(1,2,3,4,5,6...) 希望从中获得一个子列表,其中只有某些已知位置的项,即1、2、4、7等位置的项。按照建议使用过滤器索引 fun main() { val values = listOf(1, 2, 3, 4, 5, 6, 7, 8, 9, 0) val filter = listOf(1, 2, 4, 7) val resultV1 = values.filterByIndexV1(filter) val

有清单

val list = toList(1,2,3,4,5,6...)

希望从中获得一个子列表,其中只有某些已知位置的项,即1、2、4、7等位置的项。

按照建议使用过滤器索引

fun main() {
    val values = listOf(1, 2, 3, 4, 5, 6, 7, 8, 9, 0)
    val filter = listOf(1, 2, 4, 7)
    val resultV1 = values.filterByIndexV1(filter)
    val resultV2 = values.filterByIndexV2(filter)

    println("Input: $values")
    println("Filter: $filter")
    println("Result V1: $resultV1")
    println("Result V2: $resultV2")
}

fun <T> List<T>.filterByIndexV1(filter: List<Int>): List<T> {
    return this.filterIndexed { index, _ -> filter.contains(index) }
}

fun <T> List<T>.filterByIndexV2(filter: List<Int>): List<T> {
    return filter.map { this[it] }
}
fun main(){
val值=列表(1,2,3,4,5,6,7,8,9,0)
val filter=listOf(1,2,4,7)
val resultV1=值。过滤器ByIndexv1(过滤器)
val resultV2=值。filterByIndexV2(过滤器)
println(“输入:$value”)
println(“过滤器:$Filter”)
println(“结果V1:$resultV1”)
println(“结果V2:$resultV2”)
}
有趣的列表.filterByIndexV1(过滤器:列表):列表{
返回this.filterIndexed{index,->filter.contains(index)}
}
有趣的列表.filterByIndexV2(过滤器:列表):列表{
返回filter.map{this[it]}
}

您可以使用
切片
功能为其提供位置列表:

val list = listOf(1, 2, 3, 4, 5, 6, 7, 8)
val positions = listOf(1, 2, 4, 7)
println(list.slice(positions))

请注意,它会打印
[2,3,5,8]
,因为列表项的位置在Kotlin中从零开始编号,所以位置1对应于第二个元素,依此类推。

如何?扩展功能需要什么?
filterIndexed是否足够?filter indexed是否足够。。但如果他想让它可重用,可以使用一个扩展函数..注意,这将按索引顺序返回项,而不是按筛选顺序返回项。(这可能是我们想要的,但并不明显,因此值得记录。如果是这样,我建议将参数设置为一个集合,而不是一个列表,以提高效率。)或者,您可以执行例如
return filter.map{This[it]}
来获得过滤器顺序,这对于随机访问列表来说会更快。@gidds。。我喜欢这种方法:-)