【发布时间】:2017-04-04 09:54:18
【问题描述】:
该方法的目的是获取列表中的元素,直到达到限制。
例如
我想出了两种不同的实现方式
def take(l: List[Int], limit: Int): List[Int] = {
var sum = 0
l.takeWhile { e =>
sum += e
sum <= limit
}
}
这很简单,但是使用了可变状态。
def take(l: List[Int], limit: Int): List[Int] = {
val summed = l.toStream.scanLeft(0) { case (e, sum) => sum + e }
l.take(summed.indexWhere(_ > limit) - 1)
}
它看起来更简洁,但它更冗长,并且可能因为需要流而降低内存效率。
有没有更好的办法?
【问题讨论】:
标签: scala functional-programming