我有一个递归的方法。 scala有没有办法根据缓冲区的大小突破(如下所示)?当elementList.size>时爆发的情况例如5?
val elementList = ListBuffer.empty[Book]
@tailrec
def getBooks(elements: List[Element]) {
elements match {
case Nil => info("Reached end of elements list.")
case element :: rest if element.getElementType == ElementType.BOOK => {
elementList.append(element.getBook)
getLooks(rest)
}
case _ => getBooks(elements.tail)
}
}
答案 0 :(得分:1)
我想最简单的方法就是在你的if
语句中包含match
语句,如下所示:
val elementList = ListBuffer.empty[Book]
@tailrec
def getBooks(elements: List[Element]) {
if (elementList.size <= 5){
elements match {
case Nil => info("Reached end of elements list.")
case element :: rest if element.getElementType == ElementType.BOOK => {
elementList.append(element.getBook)
getLooks(rest)
}
case _ => getBooks(elements.tail)
}
}
}
答案 1 :(得分:0)
一般来说,您可以尝试传递递归中剩余元素的数量。
例如:
def get(list: List[Int], max: Int): List[Int] = {
@tailrec
def get(list: List[Int], acc: List[Int], remaining: Int): List[Int] = {
list match {
case h :: tail if remaining > 0 =>
get(tail, h :: acc, remaining - 1)
case _ =>
acc
}
}
// Requires reverse() !
get(list, Nil, max).reverse
至于累加器:您可以使用缓冲区来阻止最后的reverse()
。