Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/sorting/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java中多维字符数组的排序_Java_Sorting_Multidimensional Array_Character - Fatal编程技术网

Java中多维字符数组的排序

Java中多维字符数组的排序,java,sorting,multidimensional-array,character,Java,Sorting,Multidimensional Array,Character,我有一个多维字符串数组进程[100][2],如下所示: Y B C D A B B C 费 E-Y fd Y X 例如 我想在第一列字母上对其进行排序,以便最终结果如下所示: A B B C C D E-Y 例如 费 fd Y B Y X 我已尝试使用以下代码,但这并不奏效: Arrays.sort(process, new Comparator<String[]>() { @Override public int compare(final Str

我有一个多维字符串数组进程[100][2],如下所示:

Y B

C D

A B

B C

E-Y

fd

Y X

例如

我想在第一列字母上对其进行排序,以便最终结果如下所示:

A B

B C

C D

E-Y

例如

fd

Y B

Y X 我已尝试使用以下代码,但这并不奏效:

Arrays.sort(process, new Comparator<String[]>() {
        @Override

        public int compare(final String[] entry1, final String[] entry2) {
                final String time1 = entry1[0];
                final String time2 = entry2[0];
                return time1.compareTo(time2);

        }
});
Arrays.sort(进程,新比较器(){
@凌驾
公共整数比较(最终字符串[]entry1,最终字符串[]entry2){
最终字符串time1=entry1[0];
最终字符串time2=entry2[0];
返回时间1.比较(时间2);
}
});
我得到的结果是:

A B

B C

C D

E-Y

Y B

例如

fd


Y X

对于每一行,最好将两个字符放在同一元素中。然后,当需要单独的字符时,使用

String firstCharacter = myString.charAt(0);
String secondCharacter = myString.charAt(1);

您可以根据自己的喜好对一维数组进行排序。

下面的单元测试演示了一个工作的
比较器实现。测试也会打印出结果

import java.util.Arrays;
import java.util.Comparator;

import junit.framework.TestCase;

public class ArrayTest extends TestCase {

    public class Sorter implements Comparator {
        public int compare(Object o1, Object o2){
            String[] arrayOne = (String[])o1;
            String[] arrayTwo = (String[])o2;
            return arrayOne[0].compareTo(arrayTwo[0]);
        }
    }

    public void testSort() {
        String[][] testData = {
                {"Y", "B"},
                {"C", "D"},
                {"A", "B"},
                {"B", "C"},
                {"F", "E"},
                {"E", "Y"},
        };

        Arrays.sort(testData, new Sorter());

        String[][] expectedOutput = {
                {"A", "B"},
                {"B", "C"},
                {"C", "D"},
                {"E", "Y"},
                {"F", "E"},
                {"Y", "B"},
        };

        for(int i = 0; i < testData.length; ++i) {            
            System.out.println(testData[i][0] + " " + testData[i][1]);
            assertEquals(expectedOutput[i][0], testData[i][0]);
            assertEquals(expectedOutput[i][1], testData[i][1]);            
        }
    }
}
导入java.util.array;
导入java.util.Comparator;
导入junit.framework.TestCase;
公共类ArrayTest扩展了TestCase{
公共类分类器实现比较器{
公共整数比较(对象o1、对象o2){
字符串[]数组元素=(字符串[])o1;
字符串[]数组two=(字符串[])o2;
返回arrayOne[0]。比较(arrayTwo[0]);
}
}
公共void testSort(){
字符串[][]测试数据={
{“Y”,“B”},
{“C”,“D”},
{“A”,“B”},
{“B”,“C”},
{“F”,“E”},
{“E”,“Y”},
};
sort(testData,new Sorter());
字符串[][]预期输出={
{“A”,“B”},
{“B”,“C”},
{“C”,“D”},
{“E”,“Y”},
{“F”,“E”},
{“Y”,“B”},
};
对于(int i=0;i
此代码(相同的比较器)按预期工作:

    String[][] arr = {{"B","L"},{"C","M"},{"Z","N"}};

    Arrays.sort(arr, new Comparator<String[]>() {
        @Override
        public int compare(final String[] entry1, final String[] entry2) {
            final String time1 = entry1[0];
            final String time2 = entry2[0];
            return time1.compareTo(time2);
        }
    });
String[]arr={{“B”,“L”},{“C”,“M”},{“Z”,“N”};
sort(arr,新的比较器(){
@凌驾
公共整数比较(最终字符串[]entry1,最终字符串[]entry2){
最终字符串time1=entry1[0];
最终字符串time2=entry2[0];
返回时间1.比较(时间2);
}
});

你的问题一定在别的地方。

它在什么方面“不起作用”?数组根本没有排序吗?你能告诉我们进程数组的定义,以及在你的代码中调用
Arrays.sort()
方法后如何检查结果吗?见下面Peter的答案。你的比较器没有问题。你的
比较器与他的唯一真正区别在于你使用的是旧的、非泛型的类型和类型转换。。。在新代码中不应该这样做。事实上,他的比较器没有问题,它工作正常。请记住,这是一个简单的测试用例,演示如何解决提问者的问题。尽管如此,我仍然认为像我所做的那样使用“香草”Java代码没有什么错,它不是“香草”Java,而是“传统”Java。新代码中不应使用原始类型,无论是普通代码还是简单代码。正如警告明确告诉你的那样。