繁体   English   中英

按子数组的长度对二维数组进行排序

[英]Sort a 2d array by the length of subarrays

我要完成以下任务:

你得到一个 arrays 数组。 如果您按 arrays 的长度排序,您会看到它们的长度值是连续的。 但是缺少一个数组,您必须编写一个方法。 返回缺失数组的长度。

public static int getLengthOfMissingArray(Object[][] arrayOfArrays) {
    if (arrayOfArrays.length == 0) { //array empty
        return 0;
    }
    for (int i = 0; i < arrayOfArrays.length; i++) {
        //array in the array empty
        if (arrayOfArrays[i].length == 0) {
            return 0;
        }
        if (arrayOfArrays[i].length != arrayOfArrays[i + 1].length - 1) {
            return arrayOfArrays[i].length + 1;
        }
    }
    return 0;
}

这适用于排序的 arrays。 所以我只需要一种按长度排序的方法。

是否可以按其子数组的(升序)长度对二维数组进行排序?

例如: [[1,2], [1,5,7],[4]] -> [[4], [1,2], [1,5,7]]

Arrays.sort(arr)不起作用,我得到:

Ljava.lang.Object; 不能转换为 java.lang.Comparable

使用此方法:

public static int[][] sort(int[][] arr) {
    for (int i = 0; i < arr.length; i++) {
        for (int j = i + 1; j < arr.length; j++) {
            if (arr[j].length < arr[i].length) {
                // If the length of the array in j less than the
                // length of the array in i, replace between them
                int[] temp = arr[i];
                arr[i] = arr[j];
                arr[j] = temp;
            }
        }
    }
    return arr;
}

您可以使用Arrays.sort(T[],Comparator)方法:

Object[][] arr = {{1, 2}, {1, 5, 7}, {4}};

Arrays.sort(arr, Comparator.comparing(subArr -> subArr.length));

System.out.println(Arrays.deepToString(arr));
// [[4], [1, 2], [1, 5, 7]]

另请参阅:按第一列排序二维数组,然后按第二列

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM