if (a == b) return 0; else if ((a == 5 && b == 4) || (a == 4 && b == 5)) { return b.CompareTo(a); } else return (a - b);
public static int cmp(int a, int b) { if (b == 4) return -1; return a.CompareTo(b); }
list.Where(x => x != 4).OrderBy(v=>v).ToList().Add(5);
更正,修正有多个4排序的问题 public static int cmp(int a, int b) { if (b == 4) return -1; if (a == 4) return 1; return a.CompareTo(b); }
因为需求是4,要排在最后。a, b, 分别是左边和右边,正常情况下a>b 返回 1(大于0的值) a == b 返回 0 a < b 返回 -1(小于0的值)那么再加上,我们要把4 排在最后,意味着,4是最大的数。那么当 b = 4时,我们就直接判定 a < b,所以返回 -1,这里隐含了一种情况,就是 a = 4 的时候,我们也判定为 a < b 了,但我这么做的目的是保持出现的顺序不变,也就是说,出现在左边的4,排序后也应该排列在左边。既然已经处理了 b = 4 的情况那么下面就考虑 a = 4 的情况,因为这时候 b 已经不可能为4了,所以一定有 a > b 那就直接返回 1上面两种情况已经处理了所有4的可能,那么后面就按正常的排序方式就好。直接 return a.CompareTo(b) 就好了
return 0;
else if ((a == 5 && b == 4) || (a == 4 && b == 5))
{
return b.CompareTo(a);
}
else
return (a - b);
public static int cmp(int a, int b)
{
if (b == 4)
return -1;
return a.CompareTo(b);
}
{
if (b == 4)
return -1;
if (a == 4)
return 1;
return a.CompareTo(b);
}
因为需求是4,要排在最后。a, b, 分别是左边和右边,正常情况下a>b 返回 1(大于0的值)
a == b 返回 0
a < b 返回 -1(小于0的值)那么再加上,我们要把4 排在最后,意味着,4是最大的数。那么当 b = 4时,我们就直接判定 a < b,所以返回 -1,这里隐含了一种情况,就是 a = 4 的时候,我们也判定为 a < b 了,但我这么做的目的是保持出现的顺序不变,也就是说,出现在左边的4,排序后也应该排列在左边。既然已经处理了 b = 4 的情况那么下面就考虑 a = 4 的情况,因为这时候 b 已经不可能为4了,所以一定有
a > b
那就直接返回 1上面两种情况已经处理了所有4的可能,那么后面就按正常的排序方式就好。直接 return a.CompareTo(b) 就好了