如何编写一个 lambda 表达式,它接受两个长参数作为范围边界并返回该范围内所有数字的乘法
val lambda: (Long, Long) -> Long = { x, y -> for (i in x..y) {x * y}//I don't know what to fix in this block }
最佳答案
您可以使用reduce函数,它在 O(n-1) 中执行操作:
val lambda: (Long, Long) -> Long = { x, y -> (x..y).reduce { a, b -> a*b } }
但不幸的是,如果集合中有 0 个元素或 1 个元素,它会抛出异常,所以我建议使用折叠函数,它会再进行一次迭代,即 O(n): 罢工>
val lambda: (Long, Long) -> Long = { x, y -> (x..y).fold(1) { a, b -> a*b } }
罢工><罢工>罢工>
它应该并且将会抛出作为 lambda(3L, 1L)
传递的元素因为没有元素,而不是 1。
关于kotlin - 如何将 Long 类型的范围与 lambda 表达式相乘,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62472657/