2017-09-01 189 views

回答

4

您检查列表是否包含给定元素(这将导致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