我有一个数组,其中包含数组。 我需要编写一个函数,对大数组上的小数组进行排序(我的意思是,小数组的最小和是索引 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/