scala - 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:_*)
}
解决方案
您不能使用++
保持顺序连接两个排序数组。++
只需将一个序列粘贴到另一个序列的末尾即可。
您需要从合并排序算法merge
中实现类似操作,并从合并的元素中创建新元素而不进行排序。所以,你需要做 3 件事:Seq
实现合并:
def merge(a: Seq[T], b: Seq[T]): YourElemsType[T] = ???
Seq
实现无需排序即可创建实例 的新方法object Seq
:def fromSorted(initialElems: T*): Seq[T] = new Seq(initialElems:_*)
毕竟,你
concat
可以实现为组合merge
和fromSorted
:def concat(a:Seq[T]): Seq[T] = Seq.fromSorted(merge(this, a))
阅读有关归并排序wiki的更多信息
推荐阅读
- sql-server - 将 SQL Server 列从实数转换为浮点数,而不会引入小错误
- linux - find 尝试访问不可读的目录,即使它被明确排除
- python-3.x - 如何在此函数上使用多线程处理 np.meshgrid 值?
- python - 如何使用 Python 使用不同的输入自动从网站下载文件?
- rust - read in chunks with async-std
- php - Docker 和命令 docker-php
- spring-boot - 从同一实体创建不同 JSON 响应的最佳方法
- excel - 是否可以修复 Excel 范围对象的方向?
- mysql - 将csv文件插入mysql数据库
- python - 继承与python中的扩展