Scala:创建相同类型的新列表

时间:2014-07-29 16:26:49

标签: list scala copy

我被困了,谷歌提供给我的解决方案(不是那么多)并没有以某种方式工作。这听起来微不足道,但现在让我忙了两个小时(也许我应该去散步......)。

我有一个类型XYoldList: List[XY]的列表,其中包含元素。我需要的只是一个新的空List同类型。

我已经尝试了类似的东西:

newList[classOf(oldList[0])]
newList = oldList.clone()
newList.clear()

但它并没有使用我不喜欢的MutableList的方法。 :/

是否有最佳(或任何有效)的做法来创建某种类型的新List

感谢任何建议, 茶壶

P.S。如果它很简单,请不要太苛刻,我是Scala的新手。 :(

3 个答案:

答案 0 :(得分:1)

可能有更好的解决方案,但从头到尾:

def nilOfSameType[T](l: List[T]) = List.empty[T]
val xs = List(1,2,3)
nilOfSameType(xs)
// List[Int] = List()

答案 1 :(得分:1)

由于空列表不包含任何内容,因此type参数实际上并不重要 - 空List[Int]与空List[String]相同。事实上,它们是完全相同的对象NilNil的类型为List[Nothing],可以向任何其他List转发。

通常,虽然在处理带有类型参数的类型时,旧值的类型参数将在范围内,并且可用于创建新实例。这是一个可变集合的通用方法,其中类型参数即使是空的也很重要:

def processList[T](oldList: collection.mutable.Buffer[T]) = {
  val newList = collection.mutable.Buffer[T]()
  // Do something with oldList and newList
}

答案 2 :(得分:0)

如果你想要它是空的,你所要做的就是:

val newList = List [XY]()

只要我理解你的问题,

真的是这样。