scala重载方法过滤器

vom3gejh  于 2021-07-14  发布在  Java
关注(0)|答案(2)|浏览(364)

我有一个练习,我必须找到第一个>=0的元素,它不在集合中。我的计划是首先: filter 从集合中取负数,然后按 sliding ,然后添加 difference 到元组(如果是1,我知道它们之间没有任何int元素不在集合中)。然后我想过滤掉那些,这个差别不是1,所以我知道我要搜索的元素是,例如。
Set(-3,0,1,2,4) ,我有元组 (0,1),(1,2),(2,4) -->最后过滤出来的只是 (2,4, 2 (difference)) ,所以我的元素是 2+1 = 3 .
当我试图 filter 找出有区别的!=1,它说它无法解析重载方法 filter ```
def minNotContained(set: Set[Int]): Int = {
val positive = set.filter(_ >= 0)
val pairs = positive.sliding(2).toList.map(_.toList)
val pairsWithDifference = pairs.map{case List(a: Int,b: Int) => List((a,b,b-a))}.filter((x,y,z) => z!=1)

}

vlju58qv

vlju58qv1#

使用 dropWhile() 作为你的过滤器。

val setOfInts = Set(....)
val result = LazyList.from(0).dropWhile(setOfInts).head
xxls0lw8

xxls0lw82#

我设法这样做,但事实并非如此。。。。我需要使用集合上的操作来做这个练习,很抱歉回答了我的问题,但我希望我的解决方案更清晰可见。

def minNotContained(set: Set[Int]): Int = {
    val positive = set.filter(_ >= 0)
    @tailrec def isInSet(collection: Set[Int], number: Int): Int = {
      if (collection.contains(number)) isInSet(collection, number+1) else number
    }
    isInSet(set,0)

  }
  println(minNotContained(Set(-3,0,1,2,4,5,6)))

相关问题