0

如何按内部数组的字段之一对多维数组进行排序?

在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
        )  
}
4

2 回答 2

1

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

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

如果您需要对每一行的内部数组进行排序,那么您可以先对其进行排序。

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);
                }
            });
}
于 2013-05-10T09:21:53.970 回答
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。这意味着可以订购一系列产品。然后,将Products 放入一个数组中,并使用 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);

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

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);
于 2013-05-10T09:55:32.207 回答