代码之家  ›  专栏  ›  技术社区  ›  prosseek

使用Scala检查列表中的值

  •  0
  • prosseek  · 技术社区  · 10 年前

    我有一个 check(a, b, c) 检查a是否在 b c (a >= b && a <= c) . 对于给定的列表, v = List(1,2) r = List((3,4),(5,6)) ; 我想使用检查方法检查所有值r是否在r的范围内: check(1, 3, 4) && check (2, 5, 6) .

    我有如下高级解决方案,但我有一些缺失的部分。

    val x = v zip r // (Int, (Int, Int)) 
    val y = ???     // (Int, (Int, Int)) => (Int, Int, Int)
    (y map check).forall {_ == true} // error 
    

    如何获得解决方案?

    1 回复  |  直到 10 年前
        1
  •  5
  •   Kigyo    10 年前

    直接打电话怎么样 forall ?

    (v zip r).forall{case (a,(b,c)) => check(a,b,c)}
    

    一种使您的方法有效的方法(尽管我不推荐)。

    val x = v zip r
    val y = x map {case (a,(b,c)) => (a,b,c)}
    val tupledCheck = (check _).tupled
    
    //Some alternatives for the result
    (y map tupledCheck).forall(_ == true)
    (y map tupledCheck).forall(identity)
    y forall tupledCheck