2
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文字が表示されますが、文字列全体が必要です

4

2 に答える 2

6

最初の文字でグループ化し、各グループの最初の文字列を取得します。

IEnumerable<string> firstInGroup =
   arr
   .GroupBy(s => s.Substring(0, 6))
   .Select(g => g.First());
于 2009-09-30T07:13:32.683 に答える
0

List.Distinct()のオーバーロードによって示唆されるように、最良の方法はIEqualityComparerを実装することだと思います。

    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();
    }
于 2009-09-30T07:41:04.407 に答える