说,我有一个字符串序列作为输入,我想得到一个新的不可变Seq,它由输入元素和一个项目组成"c".以下是我发现的两种方法:
assert(Seq("a", "b", "c") == Seq("a", "b") ++ Seq("c"))- 这个的问题是,似乎Seq("c")仅仅为了操作而实例化临时序列()是有害的并且将导致开销assert(Seq("a", "b", "c") == List("a", "b") ::: "c" :: Nil)- 这个将输入集合的类型限制为a List,因此Seq("a", "b") ::: "c" :: Nil不起作用.此外,似乎实例化a Nil也可能导致开销我的问题是:
Seq("a", "b") ::: Nil不允许Scala开发人员的缺陷?Ben*_*mes 114
使用:+(append)运算符创建一个新的 Seq使用:
val seq = Seq("a", "b") :+ "c"
// seq is now ("a","b","c")
Run Code Online (Sandbox Code Playgroud)
注意::+ 将创建一个新Seq对象.如果你有
val mySeq = Seq("a","b")
Run Code Online (Sandbox Code Playgroud)
你会打电话
mySeq :+ "c"
Run Code Online (Sandbox Code Playgroud)
mySeq 仍然会 ("a","b")
请注意,某些实现Seq比其他实现更适合附加.List针对预先优化进行了优化.Vector具有快速追加和前置操作.
:::是一个List需要另一个List作为参数的方法 - 你在接受其他类型的序列时看到的优势是什么?它必须将其他类型转换为List.如果您知道List对您的用例有效,那么请使用:::(如果必须).如果您想要多态行为,那么请使用泛型++.
使用时没有实例化开销Nil; 你没有实例化它,因为它是一个单身人士.
| 归档时间: |
|
| 查看次数: |
72508 次 |
| 最近记录: |