2016-11-23 56 views
0

这是我的问题的一个简化版本,我想停止折返回的值,如果条件在折叠满足之后,其中a.size == 7如何在foldLeft over简单List时尽早破解?

class test1 { 

    def test(a : List[Int]): Int = { 
    val list = a.foldLeft(if(a.size == 7) 1000 else 0)((b,a) => a + b) 

    list 
    } 
} 



object test1 extends App{ 
    val temp1 = new test1() 

    val list: List[Int] = List(1,2,3,4,5,6,7) 

    println(temp1.test(list)) 


} 

正如你所看到的情况在第一次会议上会遇到,但有些情况下可以在第二次或第一次会面。不知道在哪里,从这里走任何帮助理解

+0

,你将不得不执行你的条件下自己的递归folderLeft和进程列表 – Pavel

+0

嘿@PavelOliynyk,我不知道你能告诉我什么? – QQQ

+0

看到下面的答案 – Pavel

回答

2

尝试下一个模板:

def Process(A: List[Int]) : Int = { 

    def proces(a: List[Int], acc: List[Int]): Int = a match { 
    case List() => -1 
    case h :: tail => if (acc.length == 10) 1000 else proces (tail, h :: acc) 
    } 
    proces(A, List()) 
}