2009-09-30 97 views
2
string[] arr = { "abcdefXXX872358", "abcdef200X8XXX58", "abcdef200X872359", "6T1XXXXXXXXXXXX11", "7AbcdeHA30XXX541", "7AbcdeHA30XXX691" }; 

我怎麼能與上文第6位字符必須是不同得到不同數字 結果將是獲得前6個字符

abcdefXXX872358

6T1XXXXXXXXXXXX11

7AbcdeHA30XXX541

我嘗試這樣的事情

var dist = (from c in arr 
      select c).Select(a => a.Substring(0, 5)).Distinct(); 

這給了我第一個5個字符,但我想整個字符串

回答

6

組的第一個字符,並獲得各組中的第一個字符串:

IEnumerable<string> firstInGroup = 
    arr 
    .GroupBy(s => s.Substring(0, 6)) 
    .Select(g => g.First()); 
+0

子串應該是s。子串(0,5)可能是排錯錯誤 – NETQuestion 2009-10-01 01:09:02

+1

@lincs:第二個參數是長度,並且您說前六個字符應該是不同的。 – Guffa 2009-10-01 01:40:14

0

我認爲最好的方法是實現一個IEqualityComparer,就像List.Distinct()上的超載所暗示的那樣()

public class firstXCharsComparer : IEqualityComparer<string> 
    { 
     private int numChars; 
     public firstXCharsComparer(int numChars) 
     { 
      this.numChars = numChars; 
     } 

     public bool Equals(string x, string y) 
     { 
      return x.Substring(0, numChars) == y.Substring(0, numChars); 
     } 

     public int GetHashCode(string obj) 
     { 
      return obj.Substring(0, numChars).GetHashCode(); 
     } 
    } 
    static void Main(string[] args) 
    { 
     string[] arr = { "abcdefXXX872358", "abcdef200X8XXX58", "abcdef200X872359", "6T1XXXXXXXXXXXX11", "7AbcdeHA30XXX541", "7AbcdeHA30XXX691" }; 

     var result = arr.ToList().Distinct(new firstXCharsComparer(6)); 
     result.Count(); 
    }