首页 > 解决方案 > Concat 排序的通用序列

问题描述

我需要连接两个通用序列,我试图这样做,但我知道这是错误的。我应该如何以正确的方式做到这一点?(我需要得到新的 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

解决方案


您不能使用++保持顺序连接两个排序数组。++只需将一个序列粘贴到另一个序列的末尾即可。

您需要从合并排序算法merge中实现类似操作,并从合并的元素中创建新元素而不进行排序。所以,你需要做 3 件事:Seq

  1. 实现合并:

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

  2. Seq实现无需排序即可创建实例 的新方法object Seq

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

  3. 毕竟,你concat可以实现为组合mergefromSorted

    def concat(a:Seq[T]): Seq[T] = Seq.fromSorted(merge(this, a))

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


推荐阅读