私は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")
を渡すと、それは同じことにlist.size
回をチェックしているため、その後count
関数が0またはlist.size
を返すのいずれか。
Doing it == "element"
でも動作は異なります。リスト全体をチェックする代わりに、現在の要素だけをチェックするだけです。あなたがJavaのバックグラウンドから来ているなら、it
を次のように考えるほうが簡単かもしれません:Javaでは、(element) -> element.equals("element")
のようなコードを持っていますが、Kotlinでは1つのパラメータと1つのみの高次関数明示的に名前を付けるとデフォルトでit
になります。あなたはそれについてもう少し詳しく読むことができますhere。