![](/img/trans.png)
[英]Logic to get the first non-repeating(distinct) character from the string
[英]Get First 6 character from string which is distinct
string[] arr = { "abcdefXXX872358", "abcdef200X8XXX58", "abcdef200X872359", "6T1XXXXXXXXXXXX11", "7AbcdeHA30XXX541", "7AbcdeHA30XXX691" };
我怎樣才能從上面得到不同的數字,其中前6個字符必須是不同的結果將是
abcdefXXX872358
6T1XXXXXXXXXXXX11
7AbcdeHA30XXX541
我嘗試這樣的事情
var dist = (from c in arr
select c).Select(a => a.Substring(0, 5)).Distinct();
這給了我前5個字符,但我想要整個字符串
對第一個字符進行分組,並獲得每個組中的第一個字符串:
IEnumerable<string> firstInGroup =
arr
.GroupBy(s => s.Substring(0, 6))
.Select(g => g.First());
我認為最好的方法是實現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();
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.