我已经阅读了 kotlin 文档并尝试了BooleanArray.count(predicate: (Boolean) -> Boolean),但它仍然返回 的大小,而array不是数量true:
val checks = arrayOf(true, false, true, true, true)
val trueCount = checks.count { true }
Run Code Online (Sandbox Code Playgroud)
我的代码有什么问题?
您传入的谓词将始终在此处返回 true:
val trueCount = checks.count { true }
Run Code Online (Sandbox Code Playgroud)
这确实会返回数组的大小。我希望你的代码是:
val trueCount = checks.count { it }
Run Code Online (Sandbox Code Playgroud)
换句话说,“对于名为 的项目it,表达式it返回真”的项目计数。
您可能会发现另一种更容易阅读的替代方法是明确检查相等性:
val trueCount = checks.count { it == true }
Run Code Online (Sandbox Code Playgroud)
就我个人而言,我倾向于避免与布尔文字进行比较,但我可以看到在这种情况下它至少可以说更清晰。
count { it }代替count { true }的参数count不是要在数组中查找的值;它是一个谓词:一个接受一个参数并返回trueor的函数false。该谓词对数组中的每个项目调用一次,该谓词返回的值(true或false)决定了该项目是否被计数。所以结果是数组中谓词求值为 的项数。true
在这种情况下,写作{ true }是 的简写{ value -> true },并且是一个常数函数。true无论是什么,它都会返回value。因此,“计算{ true }返回的项目数true”与“计算项目数”完全相同。
相反,您想要的是计算值为 的项目数true。您应该使用的谓词是{ value -> value },它是一个接受单个参数并返回该参数值的函数。由于单个 lambda 参数it在您不为其命名时被隐式命名,因此其简写{ value -> value }就是{ it }.
| 归档时间: |
|
| 查看次数: |
790 次 |
| 最近记录: |