返回介绍

数学基础

统计学习

深度学习

工具

Scala

四、创建集合对象

发布于 2023-07-17 23:38:22 字数 3059 浏览 0 评论 0 收藏 0

  1. 可以通过集合名字 + 圆括号给出的元素列表的方式创建集合。如:

    
    
    xxxxxxxxxx
    List() Vector(1,2,3)

    在背后,这些代码都是调用了某个对象的 apply 方法。如上述代码背后展开的是:

    
    
    xxxxxxxxxx
    List.apply() Vector.apply(1,2,3)

    因此这是对 List 类的伴生对象的 apply 方法的调用,以及 Vector 类的伴生对象的 apply 方法的调用。它们的 apply 方法接收任意数量的入参,并基于这些入参构造相应的集合。

    scala 类库中的每个集合类都有一个带 apply 方法的伴生对象。至于集合类代表具体的实现是类(如List,Stream,Vector)还是特质(如 Seq,Set,Traversable )并不重要。对后者而言,调用 apply 将会产出该特质的某种默认实现。

    如:

    
    
    xxxxxxxxxx
    List(1,2,3) // 创建 List 集合 Traversable(1,2,3) // 默认的实现为 List mutable.Traversable(1,2,3) // 默认的实现为 ArrayBuffer
  2. 除了 apply 外,每个集合伴生对象还定义了另一个成员方法 empty ,返回一个空的集合。因此,除了写 List() 之外,还可以通过 List.empty 来创建空列表。

  3. Seq 特质的后代还通过伴生对象提供了其它工厂方法,概括而言有如下这些:

    • concat:将任意数量的可遍历集合拼接起来。
    • fill/tabulate:生成指定大小的单维或多维的序列,并用某种表达式或函数来初始化。
    • range:用某个常量步生成整数的序列。
    • iterate:通过对某个起始元素反复应用某个函数来生成序列。
  4. Seq 特质的工厂方法:

    • S.empty: 创建空序列。
    • S(x,y,z):创建由元素 x,y,z 组成的序列。
    • S.concat(xs, ys, zs):通过拼接 xs, ys, zs 的元素得到的序列。
    • S.fill(n)(e):创建长度为 n 的序列,其中每个元素由表达式 e 计算。
    • S.fill(m,n)(e):创建维度为 m x n 的序列,其中每个元素由表达式 e 计算。还有更高维的版本。
    • S.tabulate(n)(f):创建长度为 n 的序列,其中下标 i 对应的元素由 f(i) 计算得出。
    • S.tabulate(m,n)(f):创建 m x n 的序列,其中每个下标为 (i,j) 的元素由 f(i,j) 计算得出。还有更高维的版本。
    • S.range(start, end):创建整数序列 start, ... , end-1.
    • S.range(start, end, step):创建从 start 开始、以 step 步长、直到(不包括)end 值为止的整数序列。
    • S.iterate(x, n)(f):创建长度为 n 的序列,元素值为 x, f(x), f(f(x)), ...

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。
列表为空,暂无数据
    我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
    原文