在使用map,flatmap等函数后,使用withFilter而不是过滤器总是更高效吗?
为什么只支持map,flatmap和foreach?(预期的功能如forall/exists)
问题:
给出一个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) 我可以像这样检查对象 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)