假设我有一个字符串序列作为输入,我想获得一个新的不可变的Seq
它由输入的元素和一个项目组成"c"
。以下是我发现有效的两种方法:
-
assert(Seq("a", "b", "c") == Seq("a", "b") ++ Seq("c"))
- 这个的问题是,似乎实例化了一个临时序列(Seq("c")
)只是为了操作是多余的并且会导致开销
-
assert(Seq("a", "b", "c") == List("a", "b") ::: "c" :: Nil)
- 这将输入集合的类型限制为List
, so Seq("a", "b") ::: "c" :: Nil
行不通的。似乎还实例化了一个Nil
也可能会导致开销
我的问题是:
- 还有其他方法可以执行此操作吗?
- 哪一个更好?
- Isn't
Seq("a", "b") ::: Nil
Scala 开发人员不允许有缺陷?
Use the :+
(附加)运算符创建一个new Seq
using:
val seq = Seq("a", "b") :+ "c"
// seq is now ("a","b","c")
Note: :+
将创建一个新的Seq
目的。
如果你有
val mySeq = Seq("a","b")
你会打电话给
mySeq :+ "c"
mySeq
仍将是("a","b")
请注意,某些实现Seq
比其他更适合附加。List
针对前置进行了优化。Vector
具有快速追加和前置操作。
:::
是一个方法List
这需要另一个List
作为它的参数 - 您认为它接受其他类型的序列有哪些优点?它必须将其他类型转换为List
。如果你知道的话List
对于您的用例来说是有效的,然后使用:::
(如果你必须)。如果您想要多态行为,请使用泛型++
.
使用时没有实例化开销Nil
;你没有实例化它,因为它是一个单例。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)