2

2 つの配列リストがあります。1 つは名前を保存するためのもので、もう 1 つは数量を保存するためのものです。配列リストの重複を避けたい。名前配列リストには名前が含まれ、それに対応する数量が数量配列リストに含まれています。

私の配列リストには重複した名前が含まれている可能性があります。配列リストを走査して名前が既に存在するかどうかを確認し、存在する場合は前の値に数量を追加し、重複したエントリを削除します。

例えば

Name     Quantity
ABC      20
xyz      10
ABC      15

必要な出力

Name    Quantity
ABC      35
XYZ      10

ありがとう

4

6 に答える 6

3

代わりにa を使用する必要がありMapます。これにより、重複したエントリが許可されなくなります。次のように使用します。

Map<String, Integer> nameToQuantityMap = new HashMap<String, Integer>():

nameToQuantityMap.put("Mr Smith", 100);
nameToQuantityMap.put("Mrs Jones", 500);

編集:質問を編集したので、答えは異なります。重複したキーの値を追加する場合は、次のようにする必要があります。

// For each (name, quantity) pair
if (nameToQuantityMap.containsKey(name) ) {
    Integer sum = nameToQuantityMap.get(name) + quantity;
    nameToQuantityMap.put(name, sum);
}
else {
        nameToQuantityMap.put(name, quantity);
}
于 2013-04-16T07:43:45.997 に答える
0
I want to avoid duplicate in the array list. 

その場合はHashSetを使用します

または、2 つの並列 ArrayList がある場合は、HashMapを使用できます

于 2013-04-16T07:42:34.553 に答える
0

Key が既に存在する場合に前の値に値を追加する場合は、これを試してください。

 public class Example {
    static Map<String, Integer> map = new HashMap<String, Integer>();

    public static void main(String[] args) {

        insertNameAndQuantity("A", 10);
        insertNameAndQuantity("B", 25);
        insertNameAndQuantity("A", 25);
        System.out.println(map);
    }

    public static void insertNameAndQuantity(String key, Integer value) {

        Integer count = map.get(key);
        if (count == null)
            map.put(key, value);
        else
            map.put(key, count + value);

    }
}

出力:

{A=35, B=25}
于 2013-04-16T07:50:22.613 に答える
0

java.util.Mapキーがマップされ、値が値になる場所を使用します。

Map<String,Integer> map = new HashMap<>();
if(map.get(name)!=null){
    Integer oValue = map.get(name)+nNalue;
}else
   map.put(name,value);
于 2013-04-16T07:44:36.170 に答える
0

これは、C# コードの実装例です。

public class temp
{
    [Test]
    public void T()
    {
        var list1 = new ArrayList(){"ABC", "xyz", "ABC"};
        var list2 = new ArrayList() {20, 10, 15};

        var nameList = new List<string>();
        var list1result = new ArrayList();
        var list2result = new ArrayList();

        int index = 0;
        foreach (string name in list1)
        {
            if (!nameList.Contains(name))
            {
                list1result.Add(name);
                var quantity = list2[index] ?? 0;
                list2result.Add(quantity);
                nameList.Add(name);
            }
            else
            {
                var index2 = 0;
                foreach (string name2 in list1result)
                {
                    if (name2 == name)
                    {
                        list2result[index2] = (int)list2result[index2] + (int)list2[index];
                    }
                    index2++;
                }
            }
            index++;
        }

        Assert.True(list1result.Count == 2, list1result.Count + " t1");
    }

}

出力をテストしましたが、正しいです。

于 2013-04-16T08:08:27.853 に答える
0

Map表現しようとしている構造は、構造のキー -> 値ストレージ タイプである で表現されるべきものに似ています。2 つのリストを持ち、それらを同期させようとするのは良くありません。

于 2013-04-16T07:43:55.100 に答える