我有一个名为DiscountableObject的列表。列表中的每个项目依次具有折扣集合。我需要的是所有DiscoubtableObjects中常见的折扣列表。
代码:
List<Discount> IntersectionOfDiscounts = new List<Discount>();
foreach(var discountableItem in DiscoutableObject)
{
IntersectionOfDiscounts = IntersectionOfDiscounts.Intersect(discountableItem.Discounts);
}
这无疑将返回一个空列表,因为IntersectionOfDiscounts在第一个实例中为空。
我想要的是获取DiscountableObject的第1项,将其与DiscountableObject的下一项进行比较,依此类推。
我知道我要做的事情是错误的,因为我正在同时对列表进行交集和添加......但是另外有什么让我感到困惑的呢?
我该如何解决这个问题?
答案 0 :(得分: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);
}
答案 1 :(得分:3)
可能更优雅的方式:
var intersection = discountableObject
.Select(discountableItem => discountableItem.Discounts)
.Aggregate( (current, next) => current.Intersect(next).ToList());
错过了你的6分钟截止日期,但无论如何我都喜欢......