C#Sort Lamba,返回什么?

时间:2016-07-18 14:35:32

标签: c#

我在网上得分低,我找不到简单的答案。

我想在List<T>.Sort()返回什么?是索引还是转移(像Java一样)

我的代码:

newUsers.Sort((userB, userA) => {

                    // User pos -1 means they have no pos.
                    if (userA.pos == -1 && userB.pos == -1) {
                        return 0;
                    }
                    if (userA.pos == -1) {
                        return -1;
                    }
                    if (userB.pos == -1) {
                        return 1;
                    }
                    if (userA.pos < userB.pos) {
                        return 1;
                    } else {
                        return -1;
                    }
                }
            );

2 个答案:

答案 0 :(得分:3)

Comparison Delegate的MSDN doc返回System.Int32:

public delegate int Comparison<in T>(
    T x,
    T y
)
  

有符号整数,表示x和y的相对值,如下表所示。

Value           | Meaning
--------------------------------------
Less than 0     | x is less than y.
0               | x equals y.
Greater than 0  | x is greater than y.

在您无关紧要的情况下,如果您不确定该怎么做,并且因为您只比较了pos,那么您可以使用:

newUsers.Sort((userA, userB) => {
                userA.pos.CompareTo(userB.pos);
            }
        );

这将为你完成整个工作。

答案 1 :(得分:2)

您有3个选择:

  • 与正确值相比,左侧值较小:小于0
  • 与正确的值相比,左值更大:更大0
  • 值相等: 0

示例:

int x1 = 1;
int x2 = 2;
int res1 = Comparer<int>.Default.Compare(x1,x2);  //-1 (1<2)
int res2 = Comparer<int>.Default.Compare(x2, x1); //1  (2>1)
int res3 = Comparer<int>.Default.Compare(x1, x1); //0  (1=1)

您可以使用任何其他值-1(或任何正值< 0而不是> 0)而不是1,但结果相同 - 但这三个值是常用。

根据此值,Sort()方法会排列列表的排序顺序。