Java 根据列对二维 int 数组进行排序的过程

声明:本页面是StackOverFlow热门问题的中英对照翻译,遵循CC BY-SA 4.0协议,如果您需要使用它,必须同样遵循CC BY-SA许可,注明原文地址和作者信息,同时你必须将它归于原作者(不是我):StackOverFlow 原文地址: http://stackoverflow.com/questions/18232788/
Warning: these are provided under cc-by-sa 4.0 license. You are free to use/share it, But you must attribute it to the original authors (not me): StackOverFlow

提示:将鼠标放在中文语句上可以显示对应的英文。显示中英文
时间:2020-08-11 23:35:37  来源:igfitidea点击:

procedure to sort a two dimensional int array depending on column

javaarraysmatrixint

提问by Ghassen Bellagha

i will show you an example about the purpose of the question .The array i have before and how we want it after the sorting :

我将向您展示一个关于问题目的的示例。我之前拥有的数组以及排序后我们想要它的方式:

Before :

前 :

Box    Weight    Priority
1       50          5
2       30          8
3       90          6
4       20          7  
5       80          9

After :

后 :

Box    Weight    Priority
3       90          6
5       80          9
1       50          5
2       30          8
4       20          7

we work in the int matrix :

我们在 int 矩阵中工作:

data= new int[BoxNumber][3];

The sorting is based in the second column Weight.Am looking for a procedure that sort the data array.

排序基于第二列 Weight.Am 寻找对数据数组进行排序的过程。

 public void sortC(int[][] temp)
{
    if (temp.length >= 2)
    {
        for (int i = 1; i <= temp.length - 1; i++)
        {
            int[] hold = temp[i];
            int[] holdP = temp[i-1];

            int j = i;

            while (j > 0 && hold[1] < holdP[1]) // 1 represents the reference of sorting
            {
                hold = temp[j];
                holdP = temp[j-1];

                temp[j] = holdP;
                temp[j-1] = hold;

                j--;
            }
        }
    }
}

 sortC(data);

I tried this one, but unfortunately is doesn't give a right sorting i couldn't figure out the pickle. Some help plz ?

我试过这个,但不幸的是没有给出正确的排序,我无法弄清楚泡菜。请帮忙?

采纳答案by johnchen902

Use java.util.Arrays.sortwith a custom Comparator.

使用java.util.Arrays.sort带有自定义Comparator

int[][] temp = { { 1, 50, 5 }, { 2, 30, 8 }, { 3, 90, 6 },
        { 4, 20, 7 }, { 5, 80, 9 }, };
Arrays.sort(temp, new Comparator<int[]>() {
    @Override
    public int compare(int[] o1, int[] o2) {
        return Integer.compare(o2[1], o1[1]);
    }
});

As shmosel mentioned below, with Java 8, you can use:

作为shmosel下文提到的,与Java 8中,您可以使用:

Arrays.sort(temp, Comparator.comparingInt(arr -> arr[1]));

回答by Tala

You can do this instead of writing your own sorting algorithm:

您可以这样做而不是编写自己的排序算法:

int[][] n = new int[10][];
//init your array here

List<int[]> ints = Arrays.asList(n);
Collections.sort(ints, new Comparator<int[]>() {
    @Override
    public int compare(int[] o1, int[] o2) {
        return o1[1] - o2[1]; // compare via second column
    }
});

and if you want make it array again:

如果你想让它再次排列:

int[][] result = ints.toArray(n);