考慮這個陣列的IEqualityComparer意思
string[] presidents = {
"Adams", "Arthur", "Buchanan", "Bush", "Carter", "Cleveland",
"Clinton", "Coolidge", "Eisenhower", "Fillmore", "Ford", "Garfield",
"Grant", "Harding", "Harrison", "Hayes", "Hoover", "Jackson",
"Jefferson", "Johnson", "Kennedy", "Lincoln", "Madison", "McKinley",
"Monroe", "Nixon", "Pierce", "Polk", "Reagan", "Roosevelt", "Taft",
"Taylor", "Truman", "Tyler", "Van Buren", "Washington", "Wilson"};
我的分組標準是與長度爲1至5在一個組的名稱,在其它基團剩餘。
我實現這個使用這個派生類
class MyLengthComparer:IEqualityComparer<Int32>
{
public Int32 GetHashCode(Int32 i)
{
return i<=5?1:6;
}
public Boolean Equals(Int32 i1,Int32 i2)
{
if(i1<=5 && i2<=5)
return true;
if(i1>5 && i2>5)
return true;
else
return false;
}
}
現在我運行這個
IEnumerable<IGrouping<Int32, String>> groupVar = presidents.GroupBy(prez=>prez.Length,new MyLengthComparer());
foreach(IGrouping<Int32, String> grp in groupVar)
{
Console.WriteLine("******" + grp.Key + "******");
foreach(String name in grp)
Console.WriteLine(name);
}
Console.ReadKey();
我想知道的IEqualityInterface.I的兩個函數的意思是說如何的比較實際上是被做。
什麼是關鍵的IGrouping意義,爲什麼它顯示5,6?
您可以使用presidents.GroupBy(p =>(p.Length> 5))實現相同的分組。當然,這並不能回答你的問題,但這會使你無法編寫比較器。 – Jens 2010-02-26 07:29:23