2017-09-01 179 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