我正在嘗試使用Kotlin的高階函數來計算列表中包含特定元素的次數。我試過類似Kotlin:高階函數來計算列表中出現的次數?
val result: Int? = list.count{ list.contains("element") }
但它似乎是返回列表的大小,我不知道爲什麼。
我正在嘗試使用Kotlin的高階函數來計算列表中包含特定元素的次數。我試過類似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
功能,或者是因爲它會檢查同樣的事情list.size
次返回0或list.size
。
做it == "element"
雖然工作方式不同。而不是檢查整個列表,只檢查當前元素。如果你來自Java背景,那麼你可能會更容易想到it
這樣:在Java中,如果你有一個只有1個參數的高階函數,並且不需要Kotlin,那麼代碼看上去有點像(element) -> element.equals("element")
沒有明確地命名它,那麼它默認爲it
。你可以閱讀更多關於它here。