一个结构 有三个参数
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
{
}
}
例如:最终排序应该是
请大大指教? c#语言!
我从其他地方看到了一个方法
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); (这里是分号)
});
虽然我还不是很懂!
1.aa 小于
小于什么?
如果你是要降序排列的话.
那最简单的办法是加权重.就是 aa100000+bb1000+cc 升序排列
1.aa小于 就是 a1.aa < a2.aa 可能我表述不够明确吧
顺便问下 怎么加权重?
我从其他地方学到一个方法
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); (这里是分号)
});
这个已经解决了我的问题 虽然我还不是很懂!
@Nicholas_Mophie: orderby加thenby吧.下面有些了.
按照你的规则实现一个 IComparer
,可以参考这里: https://www.cnblogs.com/luminji/archive/2010/09/30/1839038.html
然后使用这个 IComparer 作为 List.Sort()
的参数进行排序
使用 Linq 排序就行了:
list = list.OrderBy(a => a.aa).ThenBy(b => b.bb).ThenBy(c => c.cc).ToList();
建议改进一下排版,支持 markdown 代码高亮
– dudu 5年前@dudu: 3Q
– Nicholas_Mophie 5年前