作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
假设我有一个字符串序列作为输入,我想获得一个新的不可变的 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
,因此 Seq("a", "b")::: "c"::Nil
不起作用。另外,实例化 Nil
似乎也可能会导致开销我的问题是:
Seq("a", "b")::: Nil
不是 Scala 开发人员的一个缺陷吗?最佳答案
使用 :+
(追加)运算符创建一个新 Seq
,方法是:
val seq = Seq("a", "b") :+ "c"
// seq is now ("a","b","c")
注意::+
将创建一个新的 Seq
对象。如果你有
val mySeq = Seq("a","b")
你会打电话
mySeq :+ "c"
mySeq
仍将是 ("a","b")
请注意,Seq
的某些实现比其他实现更适合附加。 List
针对前置进行了优化。 Vector
具有快速的追加和前置操作。
:::
是 List
上的一个方法,它需要另一个 List
作为其参数 - 您认为它接受的优点是什么其他类型的序列?它必须将其他类型转换为List
。如果您知道 List
对于您的用例来说是有效的,那么请使用 :::
(如果必须的话)。如果您想要多态行为,请使用通用的 ++
。
使用Nil
没有实例化开销;您不会实例化它,因为它是单例。
关于list - 将项目添加到不可变的 Seq,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8295597/
COW 不是奶牛,是 Copy-On-Write 的缩写,这是一种是复制但也不完全是复制的技术。 一般来说复制就是创建出完全相同的两份,两份是独立的: 但是,有的时候复制这件事没多大必要
我是一名优秀的程序员,十分优秀!