【发布时间】:2014-03-15 00:50:17
【问题描述】:
对于
trait Item
case class TypeA(i: Int) extends Item
case class TypeB(i: Int) extends Item
考虑一个 Scala 项目列表,例如
val myList = List(TypeA(1), TypeB(11), TypeB(12),
TypeA(2), TypeB(21),
TypeA(3), TypeB(31))
目标是定义一个新的slice 方法,该方法可以应用于myList,并以谓词或条件作为参数;比如
myList.slice { x => x.isInstanceOf[TypeA] }
会交付
List(List(TypeA(1), TypeB(11), TypeB(12)),
List(TypeA(2), TypeB(21)),
List(TypeA(3), TypeB(31)))
在这个例子中,同样的结果将通过
myList.slice { case TypeA(x) => x < 10 }
非常感谢。
【问题讨论】:
-
哦。您的意思是谓词定义了“开始新子列表的事物”?
-
@Rob Starling 没错,谓词定义了每个子列表的下限。
-
如果输入不包含(或不以)满足谓词的元素,您在寻找什么?
-
@Rob Starling
List span证明了一个更简单、定义明确的案例,正如@Kevin Wright 所描述的那样;此处请求multiSpan方法,理想情况下可从列表实例调用,而不是作为以列表和谓词作为参数的单独方法。 -
@user3189923 - 好的,我在回答中也展示了如何做到这一点
标签: list scala collections slice