第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號(hào)安全,請(qǐng)及時(shí)綁定郵箱和手機(jī)立即綁定
已解決430363個(gè)問題,去搜搜看,總會(huì)有你想問的

如何在java中對(duì)特定的二維數(shù)組進(jìn)行排序

如何在java中對(duì)特定的二維數(shù)組進(jìn)行排序

LEATH 2022-07-06 10:45:44
我正在嘗試對(duì)以下數(shù)組進(jìn)行排序:int hitlist[][] = new int [17][2];排序信息總是在hitlist[i][0]并且它是數(shù)字的,但我找不到正確的方法Arrays.sort。輸入看起來像:[0, 0] [4, 0] [3, 1] [4, 2] [4, 4] [5, 6] [4, 7] [4, 8] [1, 9] [4, 11] [4, 12] [2, 13] [4, 14] [4, 15] [0, 0] [0, 0] [0, 0] 現(xiàn)在我希望它被排序?yàn)椋篬1, 9][2, 13][3, 1][4, 0][4, 2] [4, 4][4, 7] [4, 8][4, 11] [4, 12][4, 14] [4, 15]
查看完整描述

4 回答

?
至尊寶的傳說

TA貢獻(xiàn)1789條經(jīng)驗(yàn) 獲得超10個(gè)贊

如果要根據(jù)索引對(duì)數(shù)組進(jìn)行排序,可以Arrays::sort使用Comparator::comparingInt


int index = 0;

Arrays.sort(hitlist, Comparator.comparingInt(arr -> arr[index]));

這是Ideone中的一個(gè)示例


編輯


根據(jù)您的評(píng)論和評(píng)論,您希望[0, 0]在排序后忽略數(shù)組中的 ,在這種情況下,您可以使用:


int[][] hitlist = {{0, 0}, {4, 0}, {3, 1}, {4, 2}, {4, 4}, {5, 6}, {4, 7}, {4, 8}, {1, 9}, {4, 11}, {4, 12}, {2, 13}, {4, 14}, {4, 15}, {0, 0}, {0, 0}, {0, 0}};

int index = 0;

int[][] sortedArray = Arrays.stream(hitlist)

        .filter(arr -> arr[0] != 0 && arr[1] != 0)

        .sorted(Comparator.comparingInt(arr -> arr[index]))

        .toArray(int[][]::new);

Ideone 演示


輸出


[1, 9]

[2, 13]

[3, 1]

[4, 2]

[4, 4]

[4, 7]

[4, 8]

[4, 11]

[4, 12]

[4, 14]

[4, 15]

[5, 6]


查看完整回答
反對(duì) 回復(fù) 2022-07-06
?
慕的地10843

TA貢獻(xiàn)1785條經(jīng)驗(yàn) 獲得超8個(gè)贊

雖然我更喜歡YCF_L 的解決方案,但這個(gè)實(shí)現(xiàn)使用了帶有整數(shù)數(shù)組比較器的快速排序。這提供了更大的靈活性。


import java.util.Arrays;


/**

 * Based on Quicksort (right-most pivot) implementation from:  

 * https://www.programcreek.com/2012/11/quicksort-array-in-java/

 */

public class Sorter {

    private static interface IntArrayComparator {

        int compare(int[] a, int[] b);

    }


    public static void main(String[] args) {

        int hitlist[][] = new int[8][2];

        hitlist[4] = new int[] { 4, 10000 };

        hitlist[1] = new int[] { 1, 10 };

        hitlist[5] = new int[] { 5, 100000 };

        hitlist[0] = new int[] { 0, 1 };

        hitlist[2] = new int[] { 2, 100 };

        hitlist[7] = new int[] { 7, 10000000 };

        hitlist[3] = new int[] { 3, 1000 };

        hitlist[6] = new int[] { 6, 1000000 };


        quickSort(hitlist, (a, b) -> a[0] - b[0]);

        Arrays.asList(hitlist).stream().map(Arrays::toString).forEach(System.out::println);

    }


    public static void quickSort(int[][] arr, IntArrayComparator comparator) {

        quickSort(arr, comparator, 0, arr.length - 1);

    }


    public static void quickSort(int[][] arr, IntArrayComparator comparator, int start, int end) {

        int partition = partition(arr, comparator, start, end);

        if (partition - 1 > start) {

            quickSort(arr, comparator, start, partition - 1);

        }

        if (partition + 1 < end) {

            quickSort(arr, comparator, partition + 1, end);

        }

    }


    public static int partition(int[][] arr, IntArrayComparator comparator, int start, int end) {

        int[] pivot = arr[end];

        for (int i = start; i < end; i++) {

            if (comparator.compare(arr[i], pivot) < 0) {

                int[] temp = arr[start];

                arr[start] = arr[i];

                arr[i] = temp;

                start++;

            }

        }

        int[] temp = arr[start];

        arr[start] = pivot;

        arr[end] = temp;

        return start;

    }

}

結(jié)果

[0, 1]

[1, 10]

[2, 100]

[3, 1000]

[4, 10000]

[5, 100000]

[6, 1000000]

[7, 10000000]


查看完整回答
反對(duì) 回復(fù) 2022-07-06
?
滄海一幻覺

TA貢獻(xiàn)1824條經(jīng)驗(yàn) 獲得超5個(gè)贊

這取決于您是要對(duì)行還是列進(jìn)行排序。


假設(shè)您想對(duì)每一行進(jìn)行排序,您可以這樣做。


for(int i=0; i < hitlist.size(); i++ {

     Array.sort(hitlist[i]);

}

對(duì)列進(jìn)行排序變得棘手,在這種情況下,您可以構(gòu)造一個(gè)包含列值的新數(shù)組并將列排序或旋轉(zhuǎn)為行(90 度),將其排序?yàn)樾胁⒃俅涡D(zhuǎn)回來(-90 度)


如果您需要其他任何東西,您必須自己實(shí)現(xiàn)搜索。


希望這可以幫助


查看完整回答
反對(duì) 回復(fù) 2022-07-06
?
蠱毒傳說

TA貢獻(xiàn)1895條經(jīng)驗(yàn) 獲得超3個(gè)贊

您可以將 int 數(shù)組裝箱成 Integer 數(shù)組,然后在 lambda 函數(shù)中以數(shù)字方式比較兩個(gè) Integer 對(duì)象(第 0 個(gè)索引處的對(duì)象)。


然后簡單地將比較器傳遞給 Arrays.sort ,它將根據(jù)比較器引起的順序?qū)ζ溥M(jìn)行排序。


    Integer[][] array= {

            {1, 3},

            {10, 5},

            {4, 100},

            {12, 30} };


    Comparator<Integer[]> arrayComparator = (a1, a2) -> a1[0].compareTo(a2[0]);


    Arrays.sort(array, arrayComparator);


查看完整回答
反對(duì) 回復(fù) 2022-07-06
  • 4 回答
  • 0 關(guān)注
  • 209 瀏覽

添加回答

舉報(bào)

0/150
提交
取消
微信客服

購課補(bǔ)貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動(dòng)學(xué)習(xí)伙伴

公眾號(hào)

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號(hào)