4

我需要根据商品的价格对商品进行分类。

每件商品的价格存储在 JSON 数组中

我创建了一个二维数组来存储名称和价格

像这样的东西...

    String [][] priceArray = new String [itemArray.length()] [2];

    for(int i = 0; i < itemArray.length(); i++)
    {
        //put the item name in the first dimension
        priceArray[i][0] = itemArray.getJSONObject(i).getString("name");

        //put the item price in the second dimension        
        priceArray[i][1] = itemArray.getJSONObject(i).getString("baseprice");       
    }

    //DEBUG TO SEE THE RESULTS
    for(int i = 0; i < priceArray.length; i++)
    {
        Log.i("Item name : Item Price", priceArray[i][0] + " : " + priceArray[i][1]);               
    }

这很好用......但是我如何按第二维中的价格对数组进行排序?

这甚至是最好的方法吗?

4

4 回答 4

1

我建议您创建自己的实体价格。并在您的循环中创建具有“名称”和“基本价格”值的价格实体列表。然后您可以使用Collections.sort()和您自己的 Comparator对列表进行排序 ,您可以指定如何比较 Price 对象的方式。

于 2013-08-15T09:51:58.670 回答
1

看来您处于对象拒绝状态。尽管如此,在任意列上对二维数组进行排序还是相对容易的。只需使用自定义比较器。(下面的代码片段中省略了对列存在的错误检查。)

Arrays.sort(priceArray, new Comparator<String[]> {
    final int sortColumn = 1;

    @Override
    public int compare(String[] left, String right) {
        return left[sortColumn].compareTo(right[sortColumn]);
    }
});
于 2013-08-15T09:57:32.070 回答
1

你可以试试这个

 int[][] array2D = {{1,1},{3,21},{5,8},{10,8}};

    Arrays.sort(array2D, new Comparator<int[]>() {
        public int compare(int[] first, int[] second) {
            return first[1] - second[1];
        }
    });
于 2013-08-15T09:58:02.570 回答
0

更好的方法:利用 OO 编程,首先,创建一个包含名称和价格的类 Item:

class Item {
    String name;
    BigDecimal price;

    public String toString() { return "ITEM: {name:" + name + ", price: " + price + "}" }
}

然后创建一个项目列表而不是二维数组:

List<Item> items = new ArrayList<Item>();

for(int i = 0; i < itemArray.length(); i++)
{
    Item item = new Item();
    item.name = itemArray.getJSONObject(i).getString("name");
    item.price = new BigDecimal(itemArray.getJSONObject(i).getString("baseprice"));
    items.add(item);
}

最后,您可以根据需要按名称订购:

// Sort by name
Collections.sort(items, new Comparator<Item>() {

    @Override
    public int compare(Item o1, Item o2) {
        return o1.name.compareTo(o2.name);
    }

});

// at this point, items will be ordered by name

或者如果您想按价格订购:

// Sort by price
Collections.sort(items, new Comparator<Item>() {

    @Override
    public int compare(Item o1, Item o2) {
        return o1.price.compareTo(o2.price);
    }
});

// at this point, items will be ordered by price

当然,我遗漏了一些小问题,例如使用 getter 和 setter 而不是Item直接访问字段,但目的是展示这个想法。

于 2013-08-15T09:57:09.553 回答