-6ren">
gpt4 book ai didi

scala - 在 Scala : Map(: _*) or . toMap 中哪一个更惯用/更喜欢?

转载 作者:行者123 更新时间:2023-12-01 02:23:16 24 4
gpt4 key购买 nike

这些似乎是等效的:

scala> ("asd" zip "zxc").toMap
res62: scala.collection.immutable.Map[Char,Char] = Map(a -> z, s -> x, d -> c)

scala> Map(("asd" zip "zxc"): _*)
res63: scala.collection.immutable.Map[Char,Char] = Map(a -> z, s -> x, d -> c)

然而,现实生活中的差异是什么?哪个更地道?运行时性能会有所不同吗?

我敢肯定,关于其他类似的构造对,可能会问到相同/类似的问题,所以请随意给出更一般/抽象的答案:)

最佳答案

由于这些方法的定义位置,两者之间存在真正的区别:

  • apply构造函数在目标集合的同伴中定义:
    object Coll {
    def apply[T](els: T*): Coll[T] = ???
    }

    这意味着除了 Seq 之外,它绝对没有关于输入的信息。元素,所以它只是遍历该序列并构建一个 Coll .
  • 另一方面,toSeq , toArray , ... 在源集合中定义,这意味着它们具有有关其内部结构的所有额外信息。

  • 通常,您可以依靠 toXXX方法在需要时短路,或者返回一些有意义的专门集合。

    作为一个愚蠢的例子,考虑:
    List(1,2,3).toSeq // toSeq returns `this`, there is no overhead
    // vs.
    Seq(List(1,2,3): _*) // this will copy that list into a new one...

    如果你用 Stream.continually(1) 替换该列表,情况会变得更糟。 ...

    关于scala - 在 Scala : Map(<stuff>: _*) or <stuff>. toMap 中哪一个更惯用/更喜欢?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18688236/

    24 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com