假設您確定前兩個屬性ID
和Name
的重複項。
你可以實現一個IEqualityComparer<Item>
,並用這些Enumerable.GroupBy
:
var itemAmounts = items.GroupBy(i => i, new Item())
.Select(g => new Item {
ID = g.First().ID,
Name = g.First().Name,
Amount = g.Count()
});
這是你的項目類有意義的實施IEqualityComparer<Item>
:
class Item : IEqualityComparer<Item>
{
public int ID;
public string Name;
public int Amount;
public bool Equals(Item x, Item y)
{
if (x == null || y == null) return false;
bool equals = x.ID == y.ID && x.Name == y.Name;
return equals;
}
public int GetHashCode(Item obj)
{
if (obj == null) return int.MinValue;
int hash = 19;
hash = hash + obj.ID.GetHashCode();
hash = hash + obj.Name.GetHashCode();
return hash;
}
}
你也可以從object
覆蓋Equals
和GetHasdhCode
,那麼你根本不需要自定義比較器:GroupBy
:
var itemAmounts = items.GroupBy(i => i)
.Select(g => new Item {
ID = g.First().ID,
Name = g.First().Name,
Amount = g.Count()
});
您可以使用上面已經可用的方法:
public override bool Equals(object obj)
{
Item item2 = obj as Item;
if (item2 == null)
return false;
else
return Equals(this, item2);
}
public override int GetHashCode()
{
return GetHashCode(this);
}
什麼在你的背景下複製?只是id或id和名字? – VladL 2013-02-20 10:41:48
@VladL ID和名稱 – user1947702 2013-02-20 10:42:48
你怎麼知道'prod.Components [j]'存在?而你沒有考慮你的移動指數。 – 2013-02-20 10:44:26