Comparer 使用

 

我看 Comparer.Compare 的回傳值定義是有看沒有懂,

故特別研究其回傳值 -1、0、1之意義。

 

//此範例為由小排到大
//543210
//476195
List<int> nums = new List<int>();
nums.Add(5);
nums.Add(9);
nums.Add(1);
nums.Add(6);
nums.Add(7);
nums.Add(4);

nums.Sort(0, 3, Comparer<int>.Default);//476951
for (int i = nums.Count - 1; i >= 0; i–)
Console.Write(nums[i]);

Console.WriteLine();
nums.Sort(0, 3, new DseComparer());//476159
for (int i = nums.Count - 1; i >= 0; i–)
Console.Write(nums[i]);

Console.WriteLine();
nums.Sort(0, 3, new AscComparer());//476951
for (int i = nums.Count - 1; i >= 0; i–)
Console.Write(nums[i]);

//遞增排序
public class AscComparer : Comparer<int>
{
//x為較低位,y為較高位
public override int Compare(int x, int y)
{
if (x > y)
{
return 1;//表示x相對於y,x要往高位排
}
else if (x < y)
{
return -1;//表示x相對於y,x要往低位排
}
else
{
return 0;//表示x等於y
}
}
}

//遞淢排序
public class DseComparer : Comparer<int>
{
//x為較低位,y為較高位
public override int Compare(int x, int y)
{
if (x > y)
{
return -1;//表示x相對於y,x要往低位排
}
else if (x < y)
{
return 1;//表示x相對於y,x要往高位排
}
else
{
return 0;//表示x等於y
}
}
}

 

參考資料:

Comparer.Compare(Object, Object) 方法