在列表中添加重复项
Add duplicates together in List
第一个问题:)
我有一个 List<Materiau>
(其中 Materiau
实现了 IComparable<Materiau>
),我想删除所有重复项并将它们加在一起
(如果两个 Materiau
相同(使用比较器),将其合并到第一个并从列表中删除第二个)
一个Materiau
包含一个ID和一个数量,当我使用+=
或+
合并两个Materiau
时,它保持相同的ID,数量是已添加
无法控制列表的输入
我想要这样的东西:
List<Materiau> materiaux = getList().mergeDuplicates();
感谢您的宝贵时间:)
List<Materiau> distinctList = getList().Distinct(EqualityComparer<Materiau>.Default).ToList();
查看 Linq!特别是 GroupBy
方法。
我不知道您对 sql 有多熟悉,但 Linq 允许您查询集合,类似于 sql 的工作方式。
解释的有点深入,你完全不熟悉,但是Code Project有一个很好的例子
总结一下:
假设我们有这个
List<Product> prodList = new List<Product>
{
new Product
{
ID = 1,
Quantity = 1
},
new Product
{
ID = 2,
Quantity = 2
},
new Product
{
ID = 3,
Quantity = 7
},
new Product
{
ID = 4,
Quantity = 3
}
};
我们想对所有重复的产品进行分组,并对它们的数量求和。
我们可以这样做:
var groupedProducts = prodList.GroupBy(item => item.ID)
然后 select 分组中的值,根据需要进行聚合
var results = groupedProducts.Select( i => new Product
{
ID = i.Key, // this is what we Grouped By above
Quantity = i.Sum(prod => prod.Quantity) // we want to sum up all the quantities in this grouping
});
砰!我们有一个聚合产品列表
假设您有 class
class Foo
{
public int Id { get; set; }
public int Value { get; set; }
}
和列表中的一堆
var foocollection = new List<Foo> {
new Foo { Id = 1, Value = 1, },
new Foo { Id = 2, Value = 1, },
new Foo { Id = 2, Value = 1, },
};
然后您可以将它们分组并在每个组上构建聚合
var foogrouped = foocollection
.GroupBy( f => f.Id )
.Select( g => new Foo { Id = g.Key, Value = g.Aggregate( 0, ( a, f ) => a + f.Value ) } )
.ToList();
第一个问题:)
我有一个 List<Materiau>
(其中 Materiau
实现了 IComparable<Materiau>
),我想删除所有重复项并将它们加在一起
(如果两个 Materiau
相同(使用比较器),将其合并到第一个并从列表中删除第二个)
一个Materiau
包含一个ID和一个数量,当我使用+=
或+
合并两个Materiau
时,它保持相同的ID,数量是已添加
无法控制列表的输入
我想要这样的东西:
List<Materiau> materiaux = getList().mergeDuplicates();
感谢您的宝贵时间:)
List<Materiau> distinctList = getList().Distinct(EqualityComparer<Materiau>.Default).ToList();
查看 Linq!特别是 GroupBy
方法。
我不知道您对 sql 有多熟悉,但 Linq 允许您查询集合,类似于 sql 的工作方式。
解释的有点深入,你完全不熟悉,但是Code Project有一个很好的例子
总结一下:
假设我们有这个
List<Product> prodList = new List<Product>
{
new Product
{
ID = 1,
Quantity = 1
},
new Product
{
ID = 2,
Quantity = 2
},
new Product
{
ID = 3,
Quantity = 7
},
new Product
{
ID = 4,
Quantity = 3
}
};
我们想对所有重复的产品进行分组,并对它们的数量求和。
我们可以这样做:
var groupedProducts = prodList.GroupBy(item => item.ID)
然后 select 分组中的值,根据需要进行聚合
var results = groupedProducts.Select( i => new Product
{
ID = i.Key, // this is what we Grouped By above
Quantity = i.Sum(prod => prod.Quantity) // we want to sum up all the quantities in this grouping
});
砰!我们有一个聚合产品列表
假设您有 class
class Foo
{
public int Id { get; set; }
public int Value { get; set; }
}
和列表中的一堆
var foocollection = new List<Foo> {
new Foo { Id = 1, Value = 1, },
new Foo { Id = 2, Value = 1, },
new Foo { Id = 2, Value = 1, },
};
然后您可以将它们分组并在每个组上构建聚合
var foogrouped = foocollection
.GroupBy( f => f.Id )
.Select( g => new Foo { Id = g.Key, Value = g.Aggregate( 0, ( a, f ) => a + f.Value ) } )
.ToList();