2

我有一个名为 DiscountableObject 的列表。列表中的每个项目依次都有一个 Discounts 集合。我需要的是所有 DiscoubtableObjects 中常见的折扣列表。

代码:

List<Discount> IntersectionOfDiscounts = new List<Discount>();
foreach(var discountableItem in DiscoutableObject)
{
    IntersectionOfDiscounts = IntersectionOfDiscounts.Intersect(discountableItem.Discounts);    
}

这无疑会返回一个空列表,因为 IntersectionOfDiscounts 在第一个实例中是空的。

我想要的是取 DiscountableObject 的第 1 项,将其与 DiscountableObject 的下一项进行比较,依此类推。

我知道我正在尝试做的事情是错误的,因为我正在同时做交叉和添加到列表中......但是还有什么让我感到困惑?

我该如何解决这个问题?

4

2 回答 2

4

初始化IntersectionOfDiscounts为第一个折扣列表(如果有多个)而不是一个空列表。然后,您还可以跳过“foreach”循环中的第一项。

// add check to ensure at least 1 item.
List<Discount> IntersectionOfDiscounts = DiscoutableObject.First().Discounts; 
foreach(var discountableItem in DiscoutableObject.Skip(1))
{
    IntersectionOfDiscounts = IntersectionOfDiscounts.Intersect(discountableItem.Discounts);    
}
于 2012-04-04T15:29:54.953 回答
3

可能更优雅的方式:

var intersection = discountableObject
   .Select(discountableItem => discountableItem.Discounts)
   .Aggregate( (current, next) => current.Intersect(next).ToList());

错过了你的 6 分钟最后期限,但我还是喜欢它……

于 2012-04-04T15:57:24.003 回答