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

如何高效地编写此函数?

  •  1
  • Michael  · 技术社区  · 6 年前

    foo: Seq[B] => Boolean 这样地:

    case class B(xs: Seq[Int])
    
    def foo(bs: Seq[B]): Boolean = bs.map(_.xs.size).sum > 0
    

    上面的实现是 次优 bs 要返回的元素 true ). 你将如何实施 foo 有效

    1 回复  |  直到 5 年前
        1
  •  4
  •   Andrey Tyukin    6 年前

    好吧,为了 0 这有点微不足道:

    bs.exists(!_.xs.isEmpty)
    

    xs ,你完了。

    现在,假设阈值不是很小,例如42而不是0。

    然后可以使用 bs ,使用 scanLeft ,然后检查是否存在 exists 大于零的中间结果:

    def foo(bs: Seq[Int]): Boolean = bs
     .iterator
     .scanLeft(0)(_ + _.xs.size)
     .exists(_ > 42)