小编Kig*_*gyo的帖子

withFilter而不是filter

在使用map,flatmap等函数后,使用withFilter而不是过滤器总是更高效吗?

为什么只支持map,flatmap和foreach?(预期的功能如forall/exists)

scala lazy-evaluation for-comprehension scala-collections

78
推荐指数
2
解决办法
2万
查看次数

元素的组合

问题:

给出一个Seq seq和一个Int n.

我基本上希望元素的所有组合都达到 n的大小.这种安排很重要,例如[1,2]与[2,1]不同.

def combinations[T](seq: Seq[T], size: Int) = ...
Run Code Online (Sandbox Code Playgroud)

例:

combinations(List(1,2,3), 0) 
//Seq(Seq())

combinations(List(1,2,3), 1)
//Seq(Seq(), Seq(1), Seq(2), Seq(3))

combinations(List(1,2,3), 2) 
//Seq(Seq(), Seq(1), Seq(2), Seq(3), Seq(1,2), Seq(2,1), Seq(1,3), Seq(3,1),
//Seq(2,3), Seq(3,2))

...
Run Code Online (Sandbox Code Playgroud)

到目前为止我所拥有的:

def combinations[T](seq: Seq[T], size: Int) = {
 @tailrec
  def inner(seq: Seq[T], soFar: Seq[Seq[T]]): Seq[Seq[T]] = seq match {
    case head +: tail => inner(tail, soFar ++ {
      val insertList = Seq(head)
      for {
        comb <- soFar …
Run Code Online (Sandbox Code Playgroud)

scala

6
推荐指数
1
解决办法
1487
查看次数

isInstanceOf 用于多种可能性

我可以像这样检查对象 o 是否是 A 或 B 的实例:

o.isInstanceOf[A] || o.isInstanceOf[B]
Run Code Online (Sandbox Code Playgroud)

但如果我有更多的可能性,这会变得丑陋。

有没有办法定义这样的东西:

o.isInstanceOf[A,B,C,D, ...]
Run Code Online (Sandbox Code Playgroud)

或者

o.isInstanceOf(A,B,C,D, ...)
Run Code Online (Sandbox Code Playgroud)

或者

o.isInstanceOf(Set(A,B,C,D, ...))
Run Code Online (Sandbox Code Playgroud)

types scala

0
推荐指数
1
解决办法
460
查看次数