Java中多维字符数组的排序
我有一个多维字符串数组进程[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 我已尝试使用以下代码,但这并不奏效: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
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。新代码中不应使用原始类型,无论是普通代码还是简单代码。正如警告明确告诉你的那样。