linq排序

zhanglong_longlong 2015-10-22 02:48:27
根据年级怎么排序,比如list中有一年级XXXXX,二年级XXXXX,三年级XXXXX,多条不同数据,怎么排序呢,按照顺序排下来
,结果应该是,一年级XXXX,。。。。这样的顺序下来,直接list.order这个字符串是不行的,他是按照首字母来的。
...全文
120 15 打赏 收藏 转发到动态 举报
写回复
用AI写文章
15 条回复
切换为时间正序
请发表友善的回复…
发表回复
  • 打赏
  • 举报
回复
List<string> list = new List<string>()
    {
        "一年级XXXX",
        "一年级XX",
        "四年级XXXX",
        "四年级XX",
        "三年级XXXX",
        "三年级XX",
        "二年级XXXX",
        "二年级XX",
        "初一YYY",
        "初三YYYY",
        "大二YYY",
        "大五YYYY",
        "中班",
        "小班"
    };
List<string> sortBy = new List<string>() { "小班",
"中班",
"大班",
"一年",
"二年",
"三年",
"四年",
"五年",
"六年",
"初一",
"初二",
"初三",
"中一",
"中二",
"中三",
"高一",
"高二",
"高三",
"专一",
"专二",
"专三",
"大一",
"大二",
"大三",
"大四",
"大五",
"研一",
"研二" };
foreach (var item in list.OrderBy(x => sortBy.IndexOf(x.Substring(0,2))).ThenBy(x => x))
{
    Console.WriteLine(item);
}
  • 打赏
  • 举报
回复
一样啊,sortBy数组改成上面的 然后linq那边
list.OrderBy(x => sortBy.IndexOf(x[0].ToString())
改成
list.OrderBy(x => sortBy.IndexOf(x.Substring(0,2))
上面那个一年级,二年级的就不要了
zhanglong_longlong 2015-10-22
  • 打赏
  • 举报
回复
引用 12 楼 starfd 的回复:
小班
中班
大班
一年级
二年级
三年级
四年级
五年级
六年级
初一
初二
初三
中一
中二
中三
高一
高二
高三
专一
专二
专三
大一
大二
大三
大四
大五
研一
研二
取前两位,国内大部分都全了吧
嗯,这样的规则可以,你那个代码怎么改?
  • 打赏
  • 举报
回复
小班
中班
大班
一年级
二年级
三年级
四年级
五年级
六年级
初一
初二
初三
中一
中二
中三
高一
高二
高三
专一
专二
专三
大一
大二
大三
大四
大五
研一
研二
取前两位,国内大部分都全了吧
  • 打赏
  • 举报
回复
如果你是按照国内划分的话,那前三个字符都可以可以确认的吧,那你按规则取前三位排列好就可以了
zhanglong_longlong 2015-10-22
  • 打赏
  • 举报
回复
引用 5 楼 starfd 的回复:
试了下,通过StringComparison枚举没用
class StringCompare : IComparer<string>
{
    public int Compare(string x, string y)
    {
        return string.Compare(x, y, StringComparison.Ordinal);
    }
}
那只能用不靠谱的做法了……
List<string> list = new List<string>()
        {
            "一年级XXXX",
            "一年级XX",
            "四年级XXXX",
            "四年级XX",
            "三年级XXXX",
            "三年级XX",
            "二年级XXXX",
            "二年级XX"
        };
List<string> sortBy = new List<string>() { "一", "二", "三", "四", "五", "六", "七", "八", "九" };
foreach (var item in list.OrderBy(x => sortBy.IndexOf(x[0].ToString())).ThenBy(x => x))//先按第一个数字排序,后面再按默认规则排序
{
    Console.WriteLine(item);
}
这种做法的话,六年级以上不行的,比如高一,高二
zhanglong_longlong 2015-10-22
  • 打赏
  • 举报
回复
引用 7 楼 zwbdabc 的回复:
			foreach (var item in list.OrderBy(x => "一二三四五六七八九".IndexOf(x[0])).ThenBy(x => x))
			{
				Console.WriteLine(item);
			}
这种做法的话,六年级以上不行的,比如高一,高二
zwbdabc 2015-10-22
  • 打赏
  • 举报
回复
一年级XX 一年级XXXX 二年级XX 二年级XXXX 三年级XX 三年级XXXX 四年级XX 四年级XXXX
zwbdabc 2015-10-22
  • 打赏
  • 举报
回复
			foreach (var item in list.OrderBy(x => "一二三四五六七八九".IndexOf(x[0])).ThenBy(x => x))
			{
				Console.WriteLine(item);
			}
zwbdabc 2015-10-22
  • 打赏
  • 举报
回复
哦,上面写错了,请无视之
zhanglong_longlong 2015-10-22
  • 打赏
  • 举报
回复
引用 3 楼 zwbdabc 的回复:
			foreach (var item in list.OrderBy(x => x.IndexOf("一二三四五六七八九")))
			{
				Console.WriteLine(item);
			}
这样不行的
  • 打赏
  • 举报
回复
试了下,通过StringComparison枚举没用
class StringCompare : IComparer<string>
{
    public int Compare(string x, string y)
    {
        return string.Compare(x, y, StringComparison.Ordinal);
    }
}
那只能用不靠谱的做法了……
List<string> list = new List<string>()
        {
            "一年级XXXX",
            "一年级XX",
            "四年级XXXX",
            "四年级XX",
            "三年级XXXX",
            "三年级XX",
            "二年级XXXX",
            "二年级XX"
        };
List<string> sortBy = new List<string>() { "一", "二", "三", "四", "五", "六", "七", "八", "九" };
foreach (var item in list.OrderBy(x => sortBy.IndexOf(x[0].ToString())).ThenBy(x => x))//先按第一个数字排序,后面再按默认规则排序
{
    Console.WriteLine(item);
}
zwbdabc 2015-10-22
  • 打赏
  • 举报
回复
			foreach (var item in list.OrderBy(x => x.IndexOf("一二三四五六七八九")))
			{
				Console.WriteLine(item);
			}
zhanglong_longlong 2015-10-22
  • 打赏
  • 举报
回复
引用 1 楼 starfd 的回复:
这个没看懂,你是要什么意思? 有点代码例子吗?
class Program
    {
        static void Main(string[] args)
        {
            List<string> list = new List<string>()
            {
                "一年级XXXX",
                "一年级XX",
                "四年级XXXX",
                "四年级XX",
                "三年级XXXX",
                "三年级XX",
                "二年级XXXX",
                "二年级XX"
            };

            foreach (var item in list.OrderBy(x=>x))
            {
                Console.WriteLine(item);
            }
            
        } 
这样的显示结果可能不是按照年级顺序进行显示,我想按照年级顺序来显示
  • 打赏
  • 举报
回复
这个没看懂,你是要什么意思? 有点代码例子吗?

8,497

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 LINQ
社区管理员
  • LINQ
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧