通过内部数组的一个字段对多维数组进行排序

时间:2013-05-10 09:15:55

标签: java arrays sorting multidimensional-array

如何通过内部数组的一个字段对多维数组进行排序?

在Java中,我如何创建这样的多维数组?以及如何通过X字段对其进行排序?有什么例子吗?

Array
(
    [0] => Array
        (
            [name] => Sony TV
            [price] => 600.00
        )

    [1] => Array
        (
            [name] => LG TV
            [price] => 350.00
        )

    [2] => Array
        (
            [name] => Samsung TV
            [price] => 425.00
        )  
}

2 个答案:

答案 0 :(得分:1)

使用Arrays.sort对多维数组进行排序。假设数据是自定义类。

 Arrays.sort(data, new Comparator<Data[]>() {
            @Override
            public int compare(final Data[] data1, final Data[] data2) {
                final String name1 = data1[0].name;
                final String name2 = data2[0].name;
                return name1.compareTo(name2);
            }
        });

如果你需要每个行的coulmn是内部数组进行排序,那么你可以先对它进行排序。

for(Data[] data : datas){
   Arrays.sort(data, new Comparator<Data>() {
                @Override
                public int compare(final Data data1, final Data data2) {
                    final String name1 = data1.name;
                    final String name2 = data2.name;
                    return name1.compareTo(name2);
                }
            });
}

答案 1 :(得分:1)

你所拥有的东西看起来根本不像一个多维数组(好吧,它看起来像一个PHP多维数组,但不是Java数组),而是一个对象数组,其中每个对象都有一个“名称”和一个“价格”领域。

在这种情况下,您应该首先创建对象的类。我们称之为Product

public class Product implements Comparable<Product> {
    private String name;
    private BigDecimal price;

    public Product(final String name, final BigDecimal price) {
        this.name = name;
        this.price = price;
    }

    @Override
    public int compareTo(final Product other) {
        return name.compareTo(other.name);
    }

    /* Other methods. */

    /* Getters and setters for price and name. */

}

你会注意到这个类实现了Comparable<Product>并且有一个方法compareTo。这意味着可以订购一系列产品。然后,将Product放入数组中,然后使用Arrays.sort()方法对其进行排序:

Product[] products = new Product[3];
products[0] = new Product("Sony TV", new BigDecimal("600.00"));
products[1] = new Product("LG TV", new BigDecimal("350.00"));
products[2] = new Product("Samsung TV", new BigDecimal("425.00"));
Arrays.sort(products);

编辑:我错过了您想要按任何字段排序的事实。在这种情况下,您需要Comparators。每个字段需要一个:

Comparator<Product> nameComparator = new Comparator<Product>() {
    @Override
    int compare(final Product p1, final Product p2) {
        return p1.getName().compareTo(p2.getName());
    };
Comparator<Product> priceComparator = new Comparator<Product>() {
    @Override
    int compare(final Product p1, final Product p2) {
        return p1.getPrice().compareTo(p2.getPrice());
    };

然后,只需将比较器提供给Array.sort()方法:

 Arrays.sort(products, nameComparator);
 /* or */
 Arrays.sort(products, priceComparator);