我有2个数组(它们实际上是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)更好的方法是什么(我假设我采用了错误的方法tbh)
答案 0 :(得分:4)
val result = (arr1 zip arr2)
.filter { (c1, _) -> predicate(c1) }
.map { (_, c2) -> c2 }
答案 1 :(得分:1)
压缩列表并使用扩展名
fun <Any> List<Pair<Any,Any>>.myfilter(c: Any): List<Any>{
val result: MutableList<Any> = mutableListOf()
for(item in this){
if(item.first == c)
result.add(item.second)
}
return result
}
fun main(args: Array<String>){
val arr1 = arrayOf<Char>('a', 'b', 'c', 'd', 'e', 'b')
val arr2 = arrayOf<Char>('z', 'y', 'x', 'w', 'v', 'u')
val zipped: List<Pair<Char,Char>> = arr1 zip arr2
print(zipped.myfilter('e'))
}