【问题标题】:Delete priority for distinct删除不同的优先级
【发布时间】:2017-05-29 14:29:35
【问题描述】:

我有一个包含许多变量的对象,我想要一个不同的函数来比较两个变量(customerid,status)来考虑重复项,我正在使用下面的比较,但我希望选择优先级如何distinct 函数将删除重复项。

有一个名为“file”的字符串变量,它将具有文件的名称(都具有相同的扩展名),但扩展名前可能有3个不同的后缀(“”,“_0”,“TEXT”)。例如

“文件名.txt”

“文件名_0.txt”

“file_Name_TEXT.txt”

当有重复时,希望“file_Name.txt”优先保留。我该怎么做?

class CustomerComparer : IEqualityComparer<Customer>
{

    public bool Equals(Customer x, Customer y)
    {
        if (Object.ReferenceEquals(x, y)) return true;

        if (Object.ReferenceEquals(x, null) || Object.ReferenceEquals(y, null))
            return false;

        return x.customerid == y.customerid && x.status == y.status;
    }

    public int GetHashCode(Customer aprov)
    {
        if (Object.ReferenceEquals(aprov, null)) return 0;

        int hashProductName = aprov.status == null ? 0 : aprov.status.GetHashCode();

        int hashProductCode = aprov.customerid.GetHashCode();

        return hashProductName ^ hashProductCode;
    }

}

【问题讨论】:

    标签: c# distinct iequalitycomparer


    【解决方案1】:

    我认为您可以对客户进行分组:

        var filteredCustomers = new List<Customer>();
        var separators = new string[] { "_", ".txt" };
    
        foreach (var customers in allCustomers.GroupBy(c => new { Id = c.customerid, Status = c.status }))
        {
            Customer uniqueCustomer = customers.FirstOrDefault(c =>
            {
                var lastPart = c.file.Split(separators, StringSplitOptions.RemoveEmptyEntries).LastOrDefault();
                if (lastPart != "TEXT" && lastPart != "0")
                {
                    return true;
                }
                return false;
            });
            if (uniqueCustomer == null)
            {
                uniqueCustomer = customers.FirstOrDefault();
            }
            filteredCustomers.Add(uniqueCustomer);
        }
    

    还可以更改查找初级客户的逻辑(例如,使用 RegEx)并将其作为属性或方法移动到您的客户类中。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-11-24
      • 1970-01-01
      • 1970-01-01
      • 2020-01-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多