我有两个数组列表,一个是保存名称,另一个是保存数量。我想避免在数组列表中重复。名称数组列表包含名称,其对应的数量包含在数量数组列表中。
我的数组列表可以包含重复的名称,我想遍历数组列表以检查名称是否已存在,如果存在,则将数量添加到先前的值并删除重复的条目。
例如
Name Quantity
ABC 20
xyz 10
ABC 15
需要输出
Name Quantity
ABC 35
XYZ 10
由于
答案 0 :(得分:3)
您应该使用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);
}
答案 1 :(得分:0)
答案 2 :(得分:0)
您尝试表示的结构类似于应由Map
表示的内容,这是一个键 - &gt;值存储类型的结构。有两个列表并试图保持同步是一个坏主意。
答案 3 :(得分:0)
使用java.util.Map
,其中key为map,value为value。
Map<String,Integer> map = new HashMap<>();
if(map.get(name)!=null){
Integer oValue = map.get(name)+nNalue;
}else
map.put(name,value);
答案 4 :(得分: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}
答案 5 :(得分: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");
}
}
我测试了输出,这是正确的。