我有一个类有Id,Product,Quantity属性。我创建了这个类的通用列表类型,并且一些项目的值是相同的(如下所示)。所以,我想合并相同的项目而不重复,但也可以将数量字段值合并为一个项目,并创建一个新的通用列表而不重复,但数量字段值为总和。但我无论如何也做不到。C#合并两个列表,没有重复和总计一个字段值
下面是代码:
class Program
{
static void Main(string[] args)
{
Product p1 = new Product(1, "apple", 1);
Product p2 = new Product(1, "apple", 1);
Product p3 = new Product(1, "apple", 1);
Product p4 = new Product(1, "apple", 1);
Product p5 = new Product(2, "orange", 1);
Product p6 = new Product(2, "orange", 1);
Product p7 = new Product(3, "mango", 1);
Product p8 = new Product(3, "mango", 1);
Product p9 = new Product(3, "mango", 1);
Product p10 = new Product(3, "mango", 1);
List<Product> list = new List<Product>();
list.Add(p1);
list.Add(p2);
list.Add(p3);
list.Add(p4);
list.Add(p5);
list.Add(p6);
list.Add(p7);
list.Add(p8);
list.Add(p9);
list.Add(p10);
var list_collapsed = Collapse(list);
foreach (var item in list_collapsed)
{
Console.WriteLine("Id:{0} - Product: {1} - Quantity: {2}", item.Id, item.Name, item.Quantity);
}
Console.ReadKey();
}
public static List<Product> Collapse(List<Product> ExpandedList)
{
List<Product> CollapsedList = new List<Product>();
for (int i = 0; i < ExpandedList.Count; i++)
{
if (CollapsedList.Count == 0)
{
CollapsedList.Add(ExpandedList[i]);
}
else
{
for (int j = 0; j < CollapsedList.Count; j++)
{
if (ExpandedList[i].Id != CollapsedList[j].Id)
{
CollapsedList.Add(ExpandedList[i]);
break;
}
else
{
CollapsedList[j].Quantity += 1;
break;
}
}
}
}
return CollapsedList;
}
}
class Product
{
public int Id { get; set; }
public string Name { get; set; }
public int Quantity { get; set; }
public Product(int id, string name, int quantity)
{
this.Id = id;
this.Name = name;
this.Quantity = quantity;
}
}
输出:
ID:1 - 产品:苹果 - 数量:3
ID:2 - 产品:橙色 - 数量:1
ID:2 - 产品:橙色 - 数量:1
ID:3 - 产品:芒果 - 数量:1
ID:3 - 产品:芒果 - 数量:1
ID:3 - 产品:芒果 - 数量:1
ID:3 - 产品:芒果 - 数量:1
但我需要它的输出喜欢这里:
ID:1 - 产品:苹果 - 产品数量:3
ID:2 - 产品:橙 - 数量:2
ID:3 - 产品:芒果 - 产品数量:4
谁能帮助我?
谢谢Tim。它成功地为我工作。 –