- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
在 Scala Collection documentation ,这个问题有一些线索:
Trait Seq has two subtraits LinearSeq, and IndexedSeq. These do not add any new operations, but each offers different performance characteristics: A linear sequence has efficient head and tail operations, whereas an indexed sequence has efficient apply, length, and (if mutable) update operations.
IndexedSeq
而不是
Seq
?
IndexedSeq
的真实示例或
LinearSeq
这些集合比
Seq
做得更好.
最佳答案
Seq
是超特征,所以它更通用,它具有所有序列共有的特征,包括线性和索引。
如果您想知道 Seq.apply
创建了什么样的序列Seq 的伴生对象中的方法,我们可以看一下实现。
请记住 如果您使用 Seq.apply,则意味着您只需要一个 Seq,并且您的代码并不关心它是线性的还是索引的
tl;博士的答案是:你使用 LinearSeq
或 IndexedSeq
当你需要有一定的性能特征时,你使用更通用的Seq
当你不在乎差异时
这是 Seq
的伴随对象:
object Seq extends SeqFactory[Seq] {
implicit def canBuildFrom[A]: CanBuildFrom[Coll, A, Seq[A]] = ReusableCBF.asInstanceOf[GenericCanBuildFrom[A]]
def newBuilder[A]: Builder[A, Seq[A]] = immutable.Seq.newBuilder[A]
}
newBuilder[A]
方法是用于构建 Seq 的方法,您可以在 Seq.apply 方法中验证(在特征
GenericCompanion
上定义):
def apply[A](elems: A*): CC[A] = {
if (elems.isEmpty) empty[A]
else {
val b = newBuilder[A]
b ++= elems
b.result()
}
}
immutable.Seq.newBuilder[A]
是什么意思? build ?
immutable.Seq
伴生对象:
object Seq extends SeqFactory[Seq] {
// stuff
def newBuilder[A]: Builder[A, Seq[A]] = new mutable.ListBuffer
}
ListBuffer
!这是为什么?那是因为
mutable.ListBuffer
也恰好是
Builder[A, Seq[A]]
,即集合库用来构建新集合的类。
b.result()
ListBuffer.result()
的返回类型是什么? ?让我们在 ListBuffer 中看看:
// Implementation of abstract method in Builder
def result: List[A] = toList
Seq(1,2,3)
返回
List[Int]
在引擎盖下,但是
这里的重点是,如果你使用 Seq(),你不需要知道你有什么样的集合,因为你暗示更抽象的接口(interface)足以满足你的需要
关于scala - Scala 中的 Seq 和 IndexedSeq/LinearSeq 有什么区别?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36091667/
你如何排序 IndexedSeq在斯卡拉的地方? API函数在哪里? 最佳答案 目前没有什么可以就地对它们进行排序。 如果您确实需要,可以转换 IndexedSeq到 Array[AnyRef]并使用
来自Java背景,我正在学习Scala,以下内容使我感到非常困惑。为什么在这两个(非常相似但又不同)的构造中返回的类型不同,这些构造仅在构建源集合的方式上有所不同- val seq1: Index
在scala集合库中Buffer继承自Seq: Buffer[A] extends Seq[A] with GenericTraversableTemplate[A, Buffer] with Buf
在scala集合库中Buffer继承自Seq: Buffer[A] extends Seq[A] with GenericTraversableTemplate[A, Buffer] with Buf
我有一个环绕 Seq.tail 的函数。我希望函数为 List 返回 List,为 IndexedSeq、Seq 返回 IndexedSeq > 对于 Seq。 目前我使用 asInstanceOf
在 Scala 2.11.2 中,以下最小示例仅在使用 时编译类型归属 在 Array[String] : object Foo { def fromList(list: List[Stri
在 Scala Collection documentation ,这个问题有一些线索: Trait Seq has two subtraits LinearSeq, and IndexedSeq.
我正在尝试解决 Codility 的 GenomicRangeQuery使用 Scala,为此我编写了以下函数: def solution(s: String, p: Array[Int], q: A
match有什么原因吗?写反对 Seq在 IndexedSeq 上的工作方式会有所不同类型比它在 LinearSeq 上的方式类型?对我来说,无论输入类型如何,下面的代码似乎都应该做完全相同的事情。当
我认为在 scala 中没有 Map[IndexedSeq[String], Int] 的默认格式(对吗?)所以我编写了自己的格式如下,但是它非常慢。有更好的方法吗? class IndexedSeq
不知道为什么下面的scala代码无法编译: import collection.immutable.Seq def foo(nodes: Seq[Int]) = null val nodes:Inde
我是一名优秀的程序员,十分优秀!