
s1: Seq[Int] = List(1, 2, 3, 4)
直接用类名构造,返回的实际是一个List
您可以使用_N_系统变量来为每一行数据添加一个序列号。以下是一个示例代码:bash
Copy code
data a
set a
seq = _N_
run
这将在数据集 a 中添加一个名为 seq 的新列,并为每行数据分配一个序列号。_N_系统变量代表数据集中的当前观察行号。
请注意,如果您希望在运行多个 data 步骤时保留观察行号,则必须使用 retain 语句。以下是一个带有 retain 语句的示例代码:
bash
Copy code
data a
retain seq 0
set a
seq + 1
run
此代码将在 a 中添加一个名为 seq 的新列,并为每行数据分配一个递增的序列号。在第一行,将使用 retain 语句将 seq 初始值设置为 0,并保留该值。在每一行,seq 将加 1,并将新值保留在下一行使用。
Scala的Seq将是Java的List,Scala的List将是Java的LinkedList。请注意,Seq是一个trait,它相当于Java的接口,但相当于即将到来的防御者方法。 Scala的List是一个抽象类,由Nil和::扩展,这是List的具体实现。
所以,在Java的List是一个接口,Scala的List是一个实现。
除此之外,Scala的List是不可变的,这不是LinkedList的情况。事实上,Java没有等价的不可变集合(只读的东西只保证新的对象不能改变,但你仍然可以改变旧的,因此,“只读”一个)。
Scala的List是由编译器和库高度优化的,它是函数式编程中的基本数据类型。然而,它有限制,它不足以并行编程。这些天,Vector是一个比List更好的选择,但习惯是很难打破。
Seq是一个很好的泛化序列,所以如果你编程到接口,你应该使用它。注意,实际上有三个:collection.Seq,collection.mutable.Seq和collection.immutable.Seq,它是后一个是“默认”导入到范围。
还有GenSeq和ParSeq。后面的方法在可能的情况下并行运行,前者是Seq和ParSeq的父代,这是当代码的并行性无关紧要的合适的泛化。它们都是相对新引入的,因此人们不会使用它们。
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)