gpt4 book ai didi

list - Kotlin 中的函数式编程 : Counting elements in list by using fold

转载 作者:行者123 更新时间:2023-12-05 01:25:34 24 4
gpt4 key购买 nike

我的任务是使用 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,不知道是哪里出了问题。那么,有没有人知道我的错误在哪里或者我该如何实现该功能?

需要说明的是:Fold 累加一个值,从初始值(在本例中为 0)开始,从左到右对当前累加器和每个元素应用操作,还是我弄错了?

编辑(我希望可以编辑问题而不是提出新问题):

是否可以返回整个列表而不只是一个整数?我刚刚找到返回整数或 bool 值的示例。我尝试了什么:我使用了上面相同的函数签名。但是我不想返回一个 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)返回 bool 值而不是列表,因此 IDE 将其标记为错误。那么有没有办法返回一个列表呢?

提前致谢。

最佳答案

通过说 return 你返回整个 count 函数。您可以使用 return@fold 代替。好喜欢

fun <A> count(list: List<A>, predicate: (A) -> Boolean): Int {
return list.fold(0) {
acc, a ->
if (predicate(a)) {
return@fold acc + 1
}

return@fold acc
}
}

或者,也许更好的做法是这样做

fun <A> count(list: List<A>, predicate: (A) -> Boolean): Int {
return list.fold(0) {
acc, a ->
if (predicate(a)) {
acc + 1
} else {
acc
}
}
}

lambda 中的最后一个表达式隐含地也是它的返回值

关于list - Kotlin 中的函数式编程 : Counting elements in list by using fold,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/70770779/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com