uses GroupBy to partition trimmed elements of an array using a custom comparer

image_pdfimage_print
   
 
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

public class MainClass {
    public static void Main() {

        string[] anagrams = { "from ", " salt", " earn ", " last ", " near ", " form " };

        var orderGroups = anagrams.GroupBy(
                    w => w.Trim(),
                    a => a.ToUpper(),
                    new AnagramEqualityComparer()
                    );

        foreach (var v in orderGroups) {
            Console.WriteLine(v);
        }
    }

    public class AnagramEqualityComparer : IEqualityComparer<string> {
        public bool Equals(string x, string y) {
            return getCanonicalString(x) == getCanonicalString(y);
        }

        public int GetHashCode(string obj) {
            return getCanonicalString(obj).GetHashCode();
        }

        private string getCanonicalString(string word) {
            char[] wordChars = word.ToCharArray();
            Array.Sort<char>(wordChars);
            return new string(wordChars);
        }
    }
}

    


This entry was posted in LINQ. Bookmark the permalink.