如何对 Array[Array[Int]] 进行排序,假设内部数组具有相同的大小,但我们不知道

凯贝

让我们考虑以下 Array[Array[Int]

val array = Array(Array(7,3,2,1), Array(3,2,5,1), Array(2,1,4,6), Array(1,2,3,4))

我想要这个结果

val sortedArray = Array(Array(1,2,3,4), Array(1,2,3,5), Array(1,2,3,7), Array(1,2,4,6))

如果我们知道每个内部数组具有相同的大小 n 我们开始对每个内部数组进行排序然后使用 sortBy

val sortedArray = array.map(_.sorted).sortBy(x => (x(0), x(1), x(2), x(3)))

不幸的是,如果我们事先不知道内部数组的大小,或者如果它很大,我们将无法如上所示进行。也许可以以动态方式定义自定义排序..

在这种情况下,我也可以做

val sortedArray = array.map(_.sorted).map(a => (a.reduce(_+_), a)).sortBy(_._1).map(_._2)

但它是有效的,因为每个数组中的元素对于每个数组都有一个 uniq 时间。

PH88

您可以Ordering为数组元素实现自己的,例如:

val array = Array(Array(7,3,2,1), Array(3,2,5,1), Array(2,1,4,6), Array(1,2,3,4))

implicit object IntArrayOrdering extends Ordering[Array[Int]] {
  override def compare(x: Array[Int], y: Array[Int]): Int =
    compareStream(x.toStream, y.toStream)

  private def compareStream(x: Stream[Int], y: Stream[Int]): Int = {
    (x.headOption, y.headOption) match {
      case (Some(xh), Some(yh))  => 
        if (xh == yh) {
          compareStream(x.tail, y.tail)
        } else {
          xh.compare(yh)
        }
      case (Some(_), None) => 1
      case (None, Some(_)) => -1
      case (None, None) => 0
    }
  }
}

array.map(_.sorted).sorted

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

我们有一个带有存储库/镜像的脱机网络。但我不知道如何将其正确添加到我的sources.list

来自分类Dev

我的代码出错,但我不知道如何修复

来自分类Dev

我们如何处理不知道前缀/命名空间的问题?

来自分类Dev

需要接口名称-但我不知道如何实现

来自分类Dev

假设我不知道数据框中的列名,如何根据该列中的值对df排序?

来自分类Dev

当robots.txt告诉我们是否不知道URL属于哪个文件夹时,我们如何知道可以对哪些URL进行爬网?

来自分类Dev

如果我不知道数组大小,如何在结构中使用指针数组

来自分类Dev

如何在不知道我们需要多少行的情况下控制SQL查询中返回的行数

来自分类Dev

如何将prop传递给我们尚不知道所需类型的React子组件

来自分类Dev

如何将prop传递给我们尚不知道所需类型的React子组件

来自分类Dev

如果我不知道每秒有多少次运行,那么如何获得相同的输出?

来自分类Dev

我不知道如何从具有其他列条件的列中获取值

来自分类Dev

我有一个函数,可以创建数组并对其进行混洗,但是我不知道如何以我想要的方式调用它

来自分类Dev

我想做一个计数对象,但我不知道如何解决

来自分类Dev

我想使用 AND grep 操作,但我不知道如何

来自分类Dev

我找到了错误的原因,但我不知道如何解决

来自分类Dev

我正在计算答案,但我不知道如何自动执行此操作

来自分类Dev

EntityFramework正在缓存旧的过时数据,但我不知道如何停止它

来自分类Dev

嗨,我将MYSQL返回的数据转换为PHP数组。但我不知道如何在值上添加双引号

来自分类Dev

如何在不知道原始数组大小的情况下增加动态数组(C ++)的大小?

来自分类Dev

当我们知道文件已经完全相同时,如何在不进行svn更新/签出的情况下,强制将文件夹标记为具有最新版本的头部修订版?

来自分类Dev

我有一个输入为图像的表单,但我不知道如何将输入标签的名称属性发送到 mysql 数据库?

来自分类Dev

如果不知道数组大小,如何将函数数组作为参数传递

来自分类Dev

如何在不知道数组大小的情况下复制二维数组

来自分类Dev

如何更新具有多列的行,但我们只想更新几个,怎么办?

来自分类Dev

如何在不知道宽度或高度的情况下最好地对矩形的角进行排序?

来自分类Dev

如何在不知道 Enum 本身的情况下对 Enum.GetValues 的结果进行排序

来自分类Dev

我们如何对带有双重条件的js对象进行排序

来自分类Dev

我正在尝试制作基于主机的战舰游戏,但我不知道该如何设置飞船

Related 相关文章

  1. 1

    我们有一个带有存储库/镜像的脱机网络。但我不知道如何将其正确添加到我的sources.list

  2. 2

    我的代码出错,但我不知道如何修复

  3. 3

    我们如何处理不知道前缀/命名空间的问题?

  4. 4

    需要接口名称-但我不知道如何实现

  5. 5

    假设我不知道数据框中的列名,如何根据该列中的值对df排序?

  6. 6

    当robots.txt告诉我们是否不知道URL属于哪个文件夹时,我们如何知道可以对哪些URL进行爬网?

  7. 7

    如果我不知道数组大小,如何在结构中使用指针数组

  8. 8

    如何在不知道我们需要多少行的情况下控制SQL查询中返回的行数

  9. 9

    如何将prop传递给我们尚不知道所需类型的React子组件

  10. 10

    如何将prop传递给我们尚不知道所需类型的React子组件

  11. 11

    如果我不知道每秒有多少次运行,那么如何获得相同的输出?

  12. 12

    我不知道如何从具有其他列条件的列中获取值

  13. 13

    我有一个函数,可以创建数组并对其进行混洗,但是我不知道如何以我想要的方式调用它

  14. 14

    我想做一个计数对象,但我不知道如何解决

  15. 15

    我想使用 AND grep 操作,但我不知道如何

  16. 16

    我找到了错误的原因,但我不知道如何解决

  17. 17

    我正在计算答案,但我不知道如何自动执行此操作

  18. 18

    EntityFramework正在缓存旧的过时数据,但我不知道如何停止它

  19. 19

    嗨,我将MYSQL返回的数据转换为PHP数组。但我不知道如何在值上添加双引号

  20. 20

    如何在不知道原始数组大小的情况下增加动态数组(C ++)的大小?

  21. 21

    当我们知道文件已经完全相同时,如何在不进行svn更新/签出的情况下,强制将文件夹标记为具有最新版本的头部修订版?

  22. 22

    我有一个输入为图像的表单,但我不知道如何将输入标签的名称属性发送到 mysql 数据库?

  23. 23

    如果不知道数组大小,如何将函数数组作为参数传递

  24. 24

    如何在不知道数组大小的情况下复制二维数组

  25. 25

    如何更新具有多列的行,但我们只想更新几个,怎么办?

  26. 26

    如何在不知道宽度或高度的情况下最好地对矩形的角进行排序?

  27. 27

    如何在不知道 Enum 本身的情况下对 Enum.GetValues 的结果进行排序

  28. 28

    我们如何对带有双重条件的js对象进行排序

  29. 29

    我正在尝试制作基于主机的战舰游戏,但我不知道该如何设置飞船

热门标签

归档