java - java中排序数组包含一些数组

标签 java arrays sorting

我有一个数组,其中包含数组。 我需要编写一个函数,对大数组上的小数组进行排序(我的意思是,小数组的最小和是索引 0 上的第一个,在索引 1 上的第二个之后,以及 in 中的小数组的最大和大数组末尾 =index bigArray.length-1

如何对包含数组的数组进行排序? 我需要在没有任何物体或类似的东西的情况下做到这一点。只是常规且简单的代码。 enter image description here

public static int [][] sum (int [][] arr) {

int sum=0;
for (int i = 0; i < arr.length; i++) {
    for (int j = 0; j < arr.length; j++) {

        sum=sum+arr[i][j];

    }

最佳答案

由于对内部数组求和是一个相对耗时的过程,并且排序时多次需要求和值,因此您应该创建一个对象来保存数组和求和,例如

static class ArraySum implements Comparable<ArraySum> {
    final int[] array;
    final int sum;
    ArraySum(int[] array) {
        this.array = array;
        this.sum = Arrays.stream(array).sum();
    }
    @Override
    public int compareTo(ArraySum that) {
        return Integer.compare(this.sum, that.sum);
    }
}

由于它是Comparable,因此您可以直接对其进行排序,因此有了它,您就可以使用 Java 8+ 流轻松对外部数组进行排序:

public static int[][] sort(int[][] arr) {
    return Arrays.stream(arr).map(ArraySum::new).sorted()
                 .map(a -> a.array).toArray(int[][]::new);
}

这不会对输入的二维数组进行排序,而是返回一个新的二维数组,即一个新的外部数组,其中原始内部数组已排序。

测试

int[][] arr = { { 3, 5, 4 }, { 4, 3, 1, 2 }, { 5, 6 } };
int[][] arr2 = sort(arr);
System.out.println(Arrays.deepToString(arr));
System.out.println(Arrays.deepToString(arr2));

输出

[[3, 5, 4], [4, 3, 1, 2], [5, 6]]
[[4, 3, 1, 2], [5, 6], [3, 5, 4]]
//    10         11        12     sum

如您所见,原始二维数组未修改,新数组按内部数组之和排序。

关于java - java中排序数组包含一些数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56245411/

相关文章:

java - Spring数据存储库不工作

java - 使用SonarLint的连接模式和自定义规则之前需要做什么

python - 将 for 循环生成的元素追加到数组中

ios - Swift:从 EKEventStore 获取到 tableView 数据后对 EKEvents 进行日期排序

java - 需要根据值(登录时间)对自定义 HashMap 进行排序

java - 如何使用 Gradle 构建库 Jar

java - 如何使用 testNG 使用 "skipFailedInvocations"和 "retryAnalyzer"?

arrays - 如何检查数组中的每个元素是否都大于它之前的元素?

c - 返回一个数组,同时告诉他这个数组的长度?

mysql - 连接或分组表以仅删除一列中的重复项