2

私はDiscountableObjectというリストを持っています。リストの各アイテムには、Discounts コレクションがあります。必要なのは、すべての DiscoubtableObject に共通する割引のリストです。

コード:

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 に答える