【问题标题】:Scala: seq.size vs pattern matchingScala:seq.size 与模式匹配
【发布时间】:2020-06-26 14:54:00
【问题描述】:

我必须根据 Seq 的大小做出决定。

所以,我可以做到:

if(mySeq.size() > 0) // do your stuff

或者,我可以这样做:

mySeq match {
  case x :: _ => // do your stuff
}

我应该更喜欢哪一个?

【问题讨论】:

    标签: scala if-statement functional-programming pattern-matching


    【解决方案1】:

    Seq 是底层集合类型的抽象。这带来了一些问题。

    除非基础集合是List,否则case x :: _ => 将不起作用,但您可以将其更改为case x +: _ => 以获得更普遍的覆盖范围。

    如果底层集合类似于VectormySeq.size 可能相当有效,但它是List 上的线性运算。

    我的建议是使用mySeq.sizeIs > 0 (Scala 2.13)。 sizeIs 旨在在确定比较后立即终止,因此即使在 List 上,它也应该在仅遍历一个元素后返回 true

    【讨论】:

      【解决方案2】:

      如果您的检查是否正好是大小 > 0,我更喜欢

      if (mySeq.nonEmpty) { .. }
      

      此解决方案不会降低性能,适用于所有版本的 scala。在我看来nonEmpty 比尺寸检查更直观。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2021-05-23
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-04-20
        相关资源
        最近更新 更多