问题:
一个结构 有三个参数
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
{
}
}
例如:最终排序应该是
- aa = 50 bb = 1 cc =50
- aa = 50 bb = 1 cc = 51
- aa = 50 bb = 3 cc = 50
- aa = 52 bb = 1 cc = 52
- aa = 52 bb = 1 cc = 53
- 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();