仅当两个字符串都重复时才从类中删除重复项

时间:2016-02-08 17:04:52

标签: c# duplicates

我有一个C#类,包含2个字符串,orderNumber和trackingNumber。我创建了这个类的List并将数据放入其中。我需要删除orderNumber和trackingNumber都是重复的任何副本。有时类可能包含重复的orderNumber,但trackingNumbers不同,所以我需要保留两者。

谢谢, 安德鲁

3 个答案:

答案 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方法传递适当的比较器,可以获得trackingNumberorderNumber的唯一项目:

    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();