【问题标题】:Sorting a multi dimensional character array in Java在Java中对多维字符数组进行排序
【发布时间】:2011-05-04 20:14:53
【问题描述】:

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

是的

C D

甲乙

B C

F E

是的

F D

Y X

E G

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

甲乙

B C

C D

是的

E G

F E

F D

是的

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);

        }
});

我得到的输出是:

甲乙

B C

C D

是的

F E

是的

E G

F D

Y X

【问题讨论】:

  • 以什么方式“不成功”?数组根本没有排序吗?
  • 您能否向我们展示进程数组的定义以及在代码中调用Arrays.sort() 方法后如何检查结果?
  • 见下方彼得的回答。你的比较器没有问题。

标签: java sorting multidimensional-array character


【解决方案1】:

以下单元测试演示了一个有效的Comparator 实现。测试也会打印出结果。

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]);            
        }
    }
}

【讨论】:

  • 你的Comparator 和他的唯一真正的区别是你使用的是旧的、非泛型类型和强制转换......你不应该在新代码中这样做。事实上,他的比较器没有问题,它工作正常。
  • 请记住,这是一个简单的测试用例,用于演示如何解决提问者问题。也就是说,我仍然认为像我所做的那样使用“香草”Java 代码并没有错。
  • 这不是“普通”Java,而是“传统”Java。原始类型不应该在新代码中使用,简单明了。正如警告清楚地告诉你的那样。
【解决方案2】:

此代码(相同的比较器)按预期工作:

    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);
        }
    });

您的问题一定出在其他地方。

【讨论】:

    【解决方案3】:

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

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

    您可以随意对一维数组进行排序。

    【讨论】:

      猜你喜欢
      • 2012-04-22
      • 2011-07-01
      • 2013-05-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-07-14
      • 2016-06-25
      • 2013-05-26
      相关资源
      最近更新 更多