c# list sort多条件排序

2019-06-18 10:20发布

问题:

一个结构 有三个参数
Data{ int aa ; int bb; int cc;}
按要求
1.aa 小于
2.aa 等于时 再考虑 bb 小于
3.aa等于时 再考虑 bb等于 再考虑 cc小于
4.最后考虑 aa 大于
5.同理 到bb 和cc
// 伪代码 规则如下
// 其中的 return X 怎么写?
list.sort(data a1 , data a2) =>
{
if (a1.aa < a2.aa)
{
}
else if(a1.aa == a2.aa)
{
if(a1.bb < a2.bb)
{
}
else if (a1.bb == a2.bb)
{
if(a1.cc < a2.cc)
{
}
else if (a1.cc == a2.cc)
{
}
else
{
}
}
else // a1.bb > a2.bb
{
}
}
else // a1.aa > a2.aa
{
}
}

例如:最终排序应该是

  1. aa = 50 bb = 1 cc =50
  2. aa = 50 bb = 1 cc = 51
  3. aa = 50 bb = 3 cc = 50
  4. aa = 52 bb = 1 cc = 52
  5. aa = 52 bb = 1 cc = 53
  6. aa = 53 bb = 1 cc = 51

请大大指教? c#语言!

回答1:

我从其他地方看到了一个方法
list.sort((data a1, data a2) =>
{
return a1.aa != a2.aa ? a1.aa.compareto(a2.aa) :(这里是冒号)
a1.bb != a2.bb ? a1.bb.compareto(a2.bb) : (这里是冒号)
a1.cc.compareto(a2.cc); (这里是分号)
});
虽然我还不是很懂!



回答2:

1.aa 小于
小于什么?
如果你是要降序排列的话.
那最简单的办法是加权重.就是 aa100000+bb1000+cc 升序排列



回答3:

按照你的规则实现一个 IComparer,可以参考这里: https://www.cnblogs.com/luminji/archive/2010/09/30/1839038.html

然后使用这个 IComparer 作为 List.Sort() 的参数进行排序



回答4:

使用 Linq 排序就行了:

list = list.OrderBy(a => a.aa).ThenBy(b => b.bb).ThenBy(c => c.cc).ToList();


标签: c# 排序