gpt4 book ai didi

list - 将项目添加到不可变的 Seq

转载 作者:行者123 更新时间:2023-12-03 05:59:04 26 4
gpt4 key购买 nike

假设我有一个字符串序列作为输入,我想获得一个新的不可变的 Seq ,它由输入的元素和一个项目 "c" 组成。以下是我发现有效的两种方法:

  1. assert(Seq("a", "b", "c") == Seq("a", "b")++ Seq("c")) - 问题与此相关的是,仅仅为了操作而实例化临时序列(Seq("c"))似乎是多余的,并且会导致开销
  2. assert(Seq("a", "b", "c") == List("a", "b")::: "c"::Nil) - 这个将输入集合的类型限制为 List,因此 Seq("a", "b")::: "c"::Nil 不起作用。另外,实例化 Nil 似乎也可能会导致开销

我的问题是:

  1. 还有其他方法可以执行此操作吗?
  2. 哪一个更好?
  3. 不允许使用 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/

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