我有一个C#类,包含2个字符串,orderNumber和trackingNumber。我创建了这个类的List并将数据放入其中。我需要删除orderNumber和trackingNumber都是重复的任何副本。有时类可能包含重复的orderNumber,但trackingNumbers不同,所以我需要保留两者。
谢谢, 安德鲁
答案 0 :(得分:3)
您可以连接这些字符串,然后根据连接的字符串进行选择。
s.getRange("A1").setValue('YES'
如果您不处理数十亿条目,这应该会运作得很好。
答案 1 :(得分:0)
我认为你可以这样做。我假设Entity类包含OrderNumber和TrackingNumber属性。您可以将其替换为原始班级名称。
public class EntityList : List<Entity>
{
public void Add(Entity entity)
{
if (this.Any(n => n.OrderNumber == entity.OrderNumber && n.TrackingNumber == entity.TrackingNumber))
return;
base.Add(entity);
}
}
和用法:
var entity1 = new Entity
{
OrderNumber = "1",
TrackingNumber = "100"
};
var entity2 = new Entity
{
OrderNumber = "2",
TrackingNumber = "101"
};
var entity3 = new Entity
{
OrderNumber = "1",
TrackingNumber = "100"
};
var list = new EntityList();
list.Add(entity1);
list.Add(entity1);
list.Add(entity3);
Console.WriteLine("Count : " + list.Count);
答案 2 :(得分:0)
比方说,这是你的班级:
private class Foo
{
public readonly string trackingNumber;
public readonly string orderNumber;
public Foo(string trackingNumber, string orderNumber)
{
this.trackingNumber = trackingNumber;
this.orderNumber = orderNumber;
}
}
通过Distinct方法传递适当的比较器,可以获得trackingNumber
和orderNumber
的唯一项目:
private class ByTrackingNumberAndOrderComparer : IEqualityComparer<Foo>
{
public bool Equals(Foo x, Foo y)
{
return string.Equals(x.trackingNumber, y.trackingNumber)
&& string.Equals(x.orderNumber, y.orderNumber);
}
public int GetHashCode(Foo obj)
{
return (obj.trackingNumber == null ? 0 : obj.trackingNumber.GetHashCode())
^ 397 ^ (obj.orderNumber == null ? 0 : obj.orderNumber.GetHashCode());
}
}
用法:
Foo[] foos = Generate(150000);
Foo[] distinct = foos.Distinct(new ByTrackingNumberAndOrderComparer()).ToArray();