Use GroupBy with a custom comparer in CSharp
Description
The following code shows how to use GroupBy with a custom comparer.
Example
using System;//from w w w . j ava2s .com
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);
}
}
}
The code above generates the following result.