我被分配了一个任务,使用fold(函数式编程)编写一个函数来计算符合谓词条件的列表中元素的数量。 我被给出了函数签名fun <A> count(list<A>, predicate: (A) -> Boolean): Int
。 Fold不仅可以用作迭代,还可以生成返回值。 所以我尝试了以下代码:
fun <A> count(list: List<A>, predicate: (A) -> Boolean): Int {
return list.fold(0) {
acc, a ->
if (predicate(a)) {
return acc + 1
}
return acc
}
}
我写了一个println来检查它是否起作用:
println(count3(listOf (1, -2, 3, 10, -5, 8, 12), { it > 0 && it < 10 }))
然而,我在控制台上得到了1的结果,而不是3,并且我不知道哪里出了问题。那么,有没有人知道我的错误在哪里或者我该如何实现该函数呢?
仅为明确起见:折叠累积一个值,从初始值(在这种情况下为0)开始,并将操作从左到右应用于当前累加器和每个元素,我理解对吗?
编辑(我希望修改问题而不是提出新问题可以吗):
是否可以返回整个列表而不仅仅是一个int?我刚刚发现只有返回整数或布尔值的示例。我尝试过使用上面相同的函数签名。但是,我想返回一个列表而不是一个Int:
fun <A> returnList(list: List<A>, predicate: (A) -> Boolean): List<A> {
return list.fold(mutableListOf()) {
acc, a ->
if (predicate(a)) {
acc.add(a)
} else {
acc
}
}
}
我发现的问题是
acc.add(a)
返回一个布尔值而不是列表,因此IDE将其标记为错误。是否有一种方法可以返回一个列表?提前致谢。