【问题标题】:Scala convert Iterable or collection.Seq to collection.immutable.SeqScala 将 Iterable 或 collection.Seq 转换为 collection.immutable.Seq
【发布时间】:2013-06-01 03:13:44
【问题描述】:

Scala 集合中的 toSeq 方法似乎返回 scala.collection.Seq,我也可以返回 TraversableIterable,但需要将其转换为 scala.collection.immutable.Seq

有没有简单的方法可以做到这一点?

谢谢 理查德

【问题讨论】:

    标签: scala scala-collections


    【解决方案1】:

    在 Scala 2.10 中使用to 方法在任意集合类型之间进行转换:

    scala> Array(1, 2, 3).toSeq
    res0: Seq[Int] = WrappedArray(1, 2, 3)
    
    scala> Array(1, 2, 3).to[collection.immutable.Seq]
    res1: scala.collection.immutable.Seq[Int] = Vector(1, 2, 3)
    

    【讨论】:

    • 您的回答对我有帮助,但是为什么,哦,为什么甚至需要这个?我只使用不可变的集合 - 为什么 for-yield 的结果需要这样的 .to?
    • 我的朋友 Ivan Yurchenko 澄清了这一点:问题在于有三件事:A) scala.collection.Seq B) scala.collection.immutable.Seq C) scala.collection.mutable.Seq B 和 C 派生自 A 所以,如果我们有 A,我们不能肯定地说它是可变的还是不可变的,这就是为什么需要显式转换(.toList 或其他东西)或从一开始就将它们设置为不可变的原因
    • 这很奇怪,因为 Scala 中的默认 Seq 只是 collections.Seq;这很奇怪,因为大多数情况下,一切都是不可变的。 List(1,2,3).toSeq 生成一个 collections.Seq... 不是 immutable.collections.Seq。好像没有错吧?
    • 甚至更奇怪的是——一个 immutable.collections.Seq .toIterable 产生一个 collections.Iterable,而不是一个 immutable.collections.Iterable!
    猜你喜欢
    • 2010-11-07
    • 2016-01-21
    • 2019-03-15
    • 1970-01-01
    • 2014-09-19
    • 2012-01-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多