LINQ C# Book

public void Linq44()
{
string[] anagrams = { "from ", " salt", " earn ", " last ", " near ", " form " };

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

ObjectDumper.Write(orderGroups, 1);
}

public class AnagramEqualityComparer : IEqualityComparer
{
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(wordChars);
return new string(wordChars);
}
}


Result

...
from
form
...
salt
last
...
earn
near