【问题标题】:Sort array 2D by index Java按索引Java对二维数组进行排序
【发布时间】:2018-10-12 21:22:55
【问题描述】:

我正在处理二维数组,我需要组织我的数组。 说明,我的数组是一个数组字符串,它在标题中包含一些双精度值,我想在标题的函数中对数组进行排序。

我想到的第一件事是获取表头并对表头进行排序,在另一个数组中获取该数组的所有列并将排序的表头的值与每个列索引[0]进行比较并推送到另一个数组。

但是,我认为有一种方法可以轻松地做到这一点,但我不知道是否有,我看到了直接在数组中排序并按此功能组织的可能性,但我不知道如何去做.

以防万一:

Original array 
String[][]myArray = {{3,Toto,30},{2,Tata,29},{1,Titi,13}};

Array expected 
String[][]newArray = {{1,Titi,13},{2,Tata,29},{3,Toto,30}};

接受提案! 谢谢。

编辑:标题可以是 Double 值。

【问题讨论】:

    标签: java arrays sorting 2d


    【解决方案1】:

    如果我理解正确的话,应该是这样的:

    Arrays.stream(myArray)
          .sorted(Comparator.comparingDouble(x -> Double.valueOf(x[0])))
          .toArray(String[][]::new);  
    

    当然,您也可以通过Arrays::sortComparator 来实现这一点

    【讨论】:

    • 在你喜欢的情况下,我想从标题中对我的数组进行排序。容易说啊啊。感谢您的帮助,但它没有工作我不知道为什么
    • @TotoD Eugene 根据您的规范给了您正确的答案。
    • 如果提供的代码 sn-p 不起作用,那么应该抛出异常或其他东西。请更新您的问题。
    • 我猜你忘了将结果分配给一个实例 :) 如果是这样,下次可能会按照 Eugine 的建议使用 Arrays.sort(myArray, Comparator.comparingDouble(x -> Double.valueOf(x[0])));
    【解决方案2】:

    我尝试之前的答案只是返回了原始数组。这对我有用:

    String[][] myArray = {{"3","Toto","30"},{"2","Tata","29"},{"1","Titi","13"}};
    Arrays.sort(myArray, new Comparator<String[]>() {
        public int compare(String[] lhs, String[] rhs) {
            try {
                double lhs_value = Double.parseDouble(lhs[0]);
                double rhs_value = Double.parseDouble(rhs[0]);
                if (lhs_value < rhs_value) return -1;
                if (lhs_value > rhs_value) return 1;
                return 0; //else the two are equal
            } catch (NumberFormatException e) {
                //handle exception
                return 0;
            } 
        }
    });
    

    我的输出:

    1 Titi 13 
    2 Tata 29 
    3 Toto 30 
    

    这里 Arrays.sort (see Javadoc) 接受两个参数:一个您正在排序的数组 (myArray) 和一个 Comparator (see Javadoc),这是一个允许在两种任意类型之间进行比较的接口。由于{"3", "Toto", "30"} 不是您创建的类型,而只是String[],我们将创建一个Comparator&lt;String[]&gt; 内联。

    比较器实现了一个“比较”函数,该函数接受两个元素,并返回 -1、0 或 1 以确定元素的顺序。本质上,“比较”在排序过程中被多次调用以精确确定排序顺序。这是一些伪代码:

    public int compare(Object a, Object b)
        if (a comes "before" b) return -1
        if (a is "equal" to b) return 0
        if (a comes "after" b) return 1
    

    如果不清楚,您可以在此处了解有关 Comparator 界面的更多信息: https://www.geeksforgeeks.org/comparator-interface-java/

    我知道我之前用过“before”和“after”,有点模糊和不严谨。如果你更倾向于数学,这里有一个关于 Comparator 接口的很好的讨论: https://math.stackexchange.com/questions/1400655/java-comparator-documentation-confused-about-the-terminology-total-order

    【讨论】:

      猜你喜欢
      • 2013-08-17
      • 2015-08-27
      • 1970-01-01
      • 2015-04-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-06-02
      • 2018-09-22
      相关资源
      最近更新 更多