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) 方法