Concat排序的通用序列

问题描述 投票:0回答:1

我需要合并两个通用序列,我试图这样做,但是我知道这是错误的。我应该如何正确地做呢? (我还需要订购新的Seq)

object Main extends App{
  val strings = Seq("f", "d", "a")
  val numbers = Seq(1,5,4,2)
  val strings2 = Seq("c", "b");
  val strings3 = strings2.concat(strings)
  println(strings3)
  println(numbers)
}


class Seq[T] private(initialElems: T*) {
  override def toString: String = initialElems.toString

  val elems = initialElems

  def concat(a:Seq[T]) = a.elems ++ this.elems
}

object Seq {
  def apply[T: Ordering](initialElems: T*): Seq[T] = new Seq(initialElems.sorted:_*)
}
scala
1个回答
0
投票

您无法使用++保持顺序连接两个排序的数组。

您需要通过合并排序算法实现类似merge的操作,并根据合并的元素创建新的Seq,而不进行排序。因此,您需要做两件事:

  1. 实施合并:

    def merge(a: Seq[T], b: Seq[T]) = ???

  2. 实施用于创建Seq实例而不在Seq对象中排序的新方法:

    def fromSorted(initialElems: T*): Seq[T] = new Seq(initialElems:_*)

阅读有关合并排序wiki的更多信息

© www.soinside.com 2019 - 2024. All rights reserved.