4

価格に応じて商品を分類する必要があります。

各商品の価格は JSON 配列に格納されます

名前と価格を格納する 2 次元配列を作成しました

このようなもの...

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

これは正常に機能します...しかし、2次元の価格で配列をソートするにはどうすればよいですか?

これはこれを行うための最良の方法ですか?

4

4 に答える 4

1

あなたは物を否定しているようです。それでも、2 次元配列を任意の列でソートするのは比較的簡単です。カスタムコンパレータを使用するだけです。(以下のスニペットでは、列の存在のエラー チェックは省略されています。)

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 に答える
1

独自のエンティティ Price を作成することをお勧めします。そしてループで、「name」と「baseprice」の値を持つ List of Price エンティティを作成します。次に、 Collections.sort()と独自の Comparatorを使用してリストを並べ替え、 Price オブジェクトを比較する方法を指定できます。

于 2013-08-15T09:51:58.670 に答える
0

これを行うためのより良い方法: OO プログラミングを利用して、最初に名前と価格を含むクラス Item を作成します。

class Item {
    String name;
    BigDecimal price;

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

次に、2D 配列ではなくアイテムのリストを作成します。

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

もちろん、フィールドにItem直接アクセスする代わりにゲッターとセッターを使用するなど、いくつかの小さな問題を見逃していますが、その意図はアイデアを示すことです。

于 2013-08-15T09:57:09.553 に答える