2017-05-29 53 views
0

我有一個對象有很多變量,我想要一個獨特的函數來比較兩個變量(customerid,status)來考慮重複項,我使用下面的比較,但我希望選擇不同功能如何刪除重複項的優先級。刪除不同的優先順序

有一個名爲「file」的字符串變量,它具有文件名(全部具有相同的擴展名),但擴展名前有3個可能的後綴(「」,「_ 0」,「TEXT」)。例如

「file_Name.txt」

「file_Name_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; 
    } 

} 

回答

0

我認爲你可以將你的客戶:

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

也有可能改變尋找底漆顧客的邏輯(例如使用正則表達式),並將其移動到您的客戶類的屬性或方法。