首页 > 解决方案 > 如何将谓词应用于一个数组并使用结果从 Kotlin 中的另一个数组中获取值

问题描述

我有 2 个数组(它们实际上是二维的,但我认为这对这个问题并不重要)

val arr1 = arrayOf<Char>('a', 'b', 'c', 'd', 'e', 'b')
val arr2 = arrayOf<Char>('z', 'y', 'x', 'w', 'v', 'u')

我正在尝试实现以下方法

fun filter(predicate: (T?) -> Boolean): Collection<Char> { ... }

上面的数组被简化为真实代码中 arr1 的内容是一个可为空的泛型(T?),但我猜我们可以继续这样的问题。

所以我想要做的是将谓词应用于第一个数组并从第二个数组的相应索引中获取值。

所以可以说我尝试

val res = obj.filter { it == 'b' }

我想要一个包含“y”和“u”的集合。

我一直在绕着房子走,所以我想我错过了正确的方法。我的最后一次尝试是(使用扁平化,因为它是一个二维数组)

val newList = arr1.flatten().mapIndexed{idx, it -> predicate}

然后我可以使用它从 arr2 获取值(假设它们总是一致地变平?)

我想我的问题是

a)如何使用带有谓词的mapIndexed获取索引列表或b)更好的方法是什么(我假设我采取了错误的方法)

标签: kotlin

解决方案


val result = (arr1 zip arr2)
    .filter { (c1, _) -> predicate(c1) }
    .map { (_, c2) -> c2 }

推荐阅读