按多个变量排序列表

时间:2019-05-11 18:04:17

标签: c#

我想根据参考文献和姓名对该列表进行排序

我应该输入什么而不是&&

list.Sort((x, y) => x.ref.CompareTo(y.ref) && x.name.CompareTo(y.name));

3 个答案:

答案 0 :(得分:2)

使用LINQ:

var sorted = list.OrderBy(x => x.ref).ThenBy(x => x.name);

答案 1 :(得分:1)

CompareTo得出-1、0或1。负数表示“第一个值小于第二个值”,0表示“两个值相等”,正数表示“第一个值大于第二个值” ”。所以您可以简单地与

进行排序
list.Sort((x, y) => 2 * x.ref.CompareTo(y.ref) + x.name.CompareTo(y.name));

通过将ref的排序顺序乘以2来赋予优先级。只有当refs相等时,名称才有机会确定符号。

如果您想先按名称排序

list.Sort((x, y) => x.ref.CompareTo(y.ref) + 2 * x.name.CompareTo(y.name));

答案 2 :(得分:0)

如果要使用该语法先按引用先排序,然后再按名称排序,则如下所示:

list.Sort((x,y)=> {
   var comp = x.ref.CompareTo(y.ref);
   if (comp == 0)
      return x.name.CompareTo(y.name);
   else
      return comp;
});

这个想法是,只有在ref相等时才比较名称。