Man*_*oid 0 functional-programming if-statement scala pattern-matching
我必须根据 Seq 的大小做出决定。
所以,要么我可以这样做:
if(mySeq.size() > 0) // do your stuff
Run Code Online (Sandbox Code Playgroud)
或者,我可以这样做:
mySeq match {
case x :: _ => // do your stuff
}
Run Code Online (Sandbox Code Playgroud)
我应该更喜欢哪一个?
如果您的检查正好是大小 > 0 或不,我更喜欢
if (mySeq.nonEmpty) { .. }
Run Code Online (Sandbox Code Playgroud)
这个解决方案没有性能损失,适用于所有版本的scala。在我看来,nonEmpty 它比尺寸检查更直观。
Seq是底层集合类型的抽象。这带来了一些问题。
case x :: _ =>除非基础集合是 a ,否则将不起作用List,但您可以将其更改为case x +: _ =>以获得更普遍的覆盖范围。
mySeq.size如果底层集合类似于 aVector但它是 a 上的线性操作,则可能相当有效List。
我的建议是使用mySeq.sizeIs > 0(Scala 2.13)。sizeIs被设计为一旦可以确定比较就终止,因此即使在 a 上,它也应该在仅遍历一个元素后List返回。true