Kotlin:用于计算列表中出现次数的高阶函数?
Kotlin: Higher-order functions to count the amount of occurrences in a List?
我正在尝试使用 Kotlin 的高阶函数来计算列表中包含特定元素的次数。我试过类似
val result: Int? = list.count{ list.contains("element") }
但似乎正在返回列表的大小,我不确定为什么。
您检查列表是否包含给定元素(这将导致 0
或列表的大小),尽管您真正想要的是计算等于给定元素的元素数量(不是整个列表)。
您需要做的是将list.contains("element")
更改为it == "element"
。
count
函数通过遍历列表并检查元素是否与谓词匹配来工作。
近似代码
fun <T> Iterable<T>.count(predicate: (T) -> Boolean) {
var count = 0
for (element in this) {
if (predicate(this)) {
count += 1
}
}
return count
}
当您将 list.contains("element")
作为参数传递时,count
函数会 returns 0 或 list.size
因为它会检查相同的东西 list.size
次。
做 it == "element"
虽然工作方式不同。您无需检查整个列表,而只需检查当前元素。如果您来自 Java 背景,您可能更容易将 it
想象成这样:在 Java 中,您的代码看起来有点像这样 (element) -> element.equals("element")
在 Kotlin 中,如果你有一个只有 1 个参数的高阶函数并且没有明确命名它,那么它默认为 it
。你可以阅读更多关于它的内容 here.
我正在尝试使用 Kotlin 的高阶函数来计算列表中包含特定元素的次数。我试过类似
val result: Int? = list.count{ list.contains("element") }
但似乎正在返回列表的大小,我不确定为什么。
您检查列表是否包含给定元素(这将导致 0
或列表的大小),尽管您真正想要的是计算等于给定元素的元素数量(不是整个列表)。
您需要做的是将list.contains("element")
更改为it == "element"
。
count
函数通过遍历列表并检查元素是否与谓词匹配来工作。
近似代码
fun <T> Iterable<T>.count(predicate: (T) -> Boolean) {
var count = 0
for (element in this) {
if (predicate(this)) {
count += 1
}
}
return count
}
当您将 list.contains("element")
作为参数传递时,count
函数会 returns 0 或 list.size
因为它会检查相同的东西 list.size
次。
做 it == "element"
虽然工作方式不同。您无需检查整个列表,而只需检查当前元素。如果您来自 Java 背景,您可能更容易将 it
想象成这样:在 Java 中,您的代码看起来有点像这样 (element) -> element.equals("element")
在 Kotlin 中,如果你有一个只有 1 个参数的高阶函数并且没有明确命名它,那么它默认为 it
。你可以阅读更多关于它的内容 here.