【问题标题】:How can I sort a one (or two) dimensional array (multidimensional) based on one column?如何根据一列对一维(或二维)数组(多维)进行排序?
【发布时间】:2015-06-08 10:48:29
【问题描述】:

我在一个 android 项目中有一个逗号分隔的字符串数组,如下所示:

1,orange,$5
2,apple,$6
3,banana,$8

我想按一个字段对数组进行排序,比如第二个字段为 apple,banana,orange...

处理这个问题的最佳数据结构或算法是什么?

【问题讨论】:

  • 我更喜欢标题是“一维或二维数组”,因为二维有点复杂,我更喜欢arrayList收集方法,数组是在运行时收集的,不固定.
  • 谁能解释一下 compareto 方法和它是如何使用的?与其他语言相比,它看起来也很复杂。
  • 你有预付款吗?

标签: java android arrays sorting csv


【解决方案1】:

使用自定义比较器对数组进行排序:

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

class Fruits {

    public static void main(final String[] args) {
        final String[][] data = new String[][] {
                new String[] { "1", "orange", "$5" },
                new String[] { "2", "apple", "$6" },
                new String[] { "3", "banana", "$8" } };

        Arrays.sort(data, new Comparator<String[]>() {
            @Override
            public int compare(final String[] entry1, final String[] entry2) {
                final String fruit1 = entry1[1];
                final String fruit2 = entry2[1];
                return fruit1.compareTo(fruit2);
            }
        });

        for (final String[] s : data) {
            System.out.println(s[0] + " - " + s[1] + " - " + s[2]);
        }
    }

}

输出:

2 - apple - $6
3 - banana - $8
1 - orange - $5

您可以阅读更多内容:

http://docs.oracle.com/javase/7/docs/api/java/lang/Comparable.html

How does this comparator work?

【讨论】:

  • @user2911996 你有预付款吗?
  • 你能把它变成一维的并且数组不固定,即。将数组传递给函数?谁能解释更多关于 compareto 方法以及它是如何使用的?与其他语言相比,它看起来也很复杂。
  • 我们还可以传递逗号分隔字符串的位置,这样我们就可以在任何位置进行排序,也可以相应地按数字或按字符串排序。我正在使它成为一个可恢复的函数调用。
  • @user2911996 我用文档链接编辑答案,我将此代码作为示例,您可以修改代码以执行您想要的操作。如果我的回答对您有帮助,您可以将其检查为已接受或投票是否对您有用,您可以在stackoverflow.com/tour 阅读更多内容
【解决方案2】:

为什么不使用 ArrayList 集合来收集数据,很容易对数据进行排序。您只需要在模型类中实现 Compralable 接口,并在 compareTo 方法中编写排序逻辑。使用 collection.sort() 对数据进行排序。

【讨论】:

    【解决方案3】:

    您应该将 String 值建模为 java bean,例如 Fruit。在该类中,您需要实现Comparable 接口,在该接口中说明对象的比较方式。使用新创建的类创建对象并将对象填充到列表中,然后只需调用 Collections.sort() 即可对列表进行排序;

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-08-17
      • 1970-01-01
      • 1970-01-01
      • 2017-05-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-04-03
      相关资源
      最近更新 更多