date.Add("000ddddddd[3]dddddd");
            date.Add("000BBBBB[3]dddddd");
            date.Add("111cccccc[2]cccc");
            date.Add("111CCCCC[2]cccc");
            date.Add("222BBBBB[0]BBBBB");
            date.Add("222bbbbbbb[0]BBBBB");
            date.Add("333aaaaaaaa[0]aaaaaaa");
            date.Add("333AAAAAAAAA[0]AAAAAAAAA");要求排序成
                      date.Add("222BBBBB[0]BBBBB");
            date.Add("222bbbbbbb[0]BBBBB");
            date.Add("333aaaaaaaa[0]aaaaaaa");
            date.Add("333AAAAAAAAA[0]AAAAAAAAA");
            date.Add("111cccccc[2]cccc");
            date.Add("111CCCCC[2]cccc");
            date.Add("000ddddddd[3]dddddd");
            date.Add("000BBBBB[3]dddddd");

解决方案 »

  1.   

    我的做法是把数据分解到list,让后编号排序,如果用datatable来查询的话可能方便一些,希望大家能提供更好的决绝方法。
       private void button1_Click(object sender, EventArgs e)
            {
                string sheetName = "";
                List<string> No = new List<string>();
                List<string> No2 = new List<string>();
                List<string> date = new List<string>();
                No.Add("[0]");
                No.Add("[2]");
                No.Add("[3]");
                No2.Add("000");
                No2.Add("111");
                No2.Add("222");
                No2.Add("333");
                date.Add("000ddddddd[3]dddddd");
                date.Add("000BBBBB[3]dddddd");
                date.Add("111cccccc[2]cccc");
                date.Add("111CCCCC[2]cccc");
                date.Add("222BBBBB[0]BBBBB");
                date.Add("222bbbbbbb[0]BBBBB");
                date.Add("333aaaaaaaa[0]aaaaaaa");
                date.Add("333AAAAAAAAA[0]AAAAAAAAA");
                List<string> tmpdate = new List<string>(date.Count);
                int index = 0;            int j=0;
                for (int s = 0; s < No.Count; s++)
                {
                    for (j = 0; j < No2.Count; j++)
                    {
                        for (int i = 0; i < date.Count; i++)
                        {
                            if (date[i].Contains(No2[j]))
                            {                            if (date[i].Contains(No[s]))
                                {
                                    tmpdate.Add(date[i]);
                                    if (sheetName!="" && sheetName != No[s])
                                    { 
                                        //new sheet
                                    }
                                    sheetName = No[s];                            }                        }
                        }
                    }            }
            }
      

  2.   

    对NET3.5以上真没那么复杂
    先把[]中数字截取出来,再按照数字OrderBy就行了            List<string> date = new List<string>();
                date.Add("000ddddddd[3]dddddd");
                date.Add("000BBBBB[3]dddddd");
                date.Add("111cccccc[2]cccc");
                date.Add("111CCCCC[2]cccc");
                date.Add("222BBBBB[0]BBBBB");
                date.Add("222bbbbbbb[0]BBBBB");
                date.Add("333aaaaaaaa[0]aaaaaaa");
                date.Add("333AAAAAAAAA[0]AAAAAAAAA");
                string sh = date[0];
                sh = sh.Substring(sh.IndexOf('['), 2);
                var ql = date.OrderBy(t => t.Substring(t.IndexOf('['), 2));
                foreach(var l in ql)
                {
                    Console.WriteLine(l.ToString());
                }
     /*
      date.Add("222BBBBB[0]BBBBB");
      date.Add("222bbbbbbb[0]BBBBB");
      date.Add("333aaaaaaaa[0]aaaaaaa");
      date.Add("333AAAAAAAAA[0]AAAAAAAAA");
      date.Add("111cccccc[2]cccc");
      date.Add("111CCCCC[2]cccc");
      date.Add("000ddddddd[3]dddddd");
      date.Add("000BBBBB[3]dddddd");
      */
      

  3.   


    void Main()
    {
    List<string> date = new List<string>();
    date.Add("000ddddddd[3]dddddd");
    date.Add("000BBBBB[3]dddddd");
    date.Add("111cccccc[2]cccc");
    date.Add("111CCCCC[2]cccc");
    date.Add("222BBBBB[0]BBBBB");
    date.Add("222bbbbbbb[0]BBBBB");
    date.Add("333aaaaaaaa[0]aaaaaaa");
    date.Add("333AAAAAAAAA[0]AAAAAAAAA");
    date=date.OrderBy(d=>int.Parse(Regex.Match(d,@"(?<=\[)\d+(?=\])").Value)).ToList();
    date.ForEach(d=>Console.WriteLine(d));
    /*
    222BBBBB[0]BBBBB
    222bbbbbbb[0]BBBBB
    333aaaaaaaa[0]aaaaaaa
    333AAAAAAAAA[0]AAAAAAAAA
    111cccccc[2]cccc
    111CCCCC[2]cccc
    000ddddddd[3]dddddd
    000BBBBB[3]dddddd
    */
    }
      

  4.   

    写得不够完整,重贴一下List<string> date = new List<string>();
                date.Add("000ddddddd[3]dddddd");
                date.Add("000BBBBB[3]dddddd");
                date.Add("111cccccc[2]cccc");
                date.Add("111CCCCC[2]cccc");
                date.Add("222BBBBB[0]BBBBB");
                date.Add("222bbbbbbb[0]BBBBB");
                date.Add("333aaaaaaaa[0]aaaaaaa");
                date.Add("333AAAAAAAAA[0]AAAAAAAAA");
                string sh = date[0];
                sh = sh.Substring(sh.IndexOf('['), 2);
                var ql = date.OrderBy(t => t.Substring(t.IndexOf('['), t.IndexOf(']') - t.IndexOf('[') + 1));
                foreach (var l in ql)
                {
                    Console.WriteLine(l.ToString());
                }督察的正则提取也不错
      

  5.   


    呵呵,你的linq进步很快。
      

  6.   


       List<string> date = new List<string>();
                date.Add("000ddddddd[3]dddddd");
                date.Add("000BBBBB[3]dddddd");
                date.Add("111cccccc[2]cccc");
                date.Add("111CCCCC[2]cccc");
                date.Add("222BBBBB[0]BBBBB");
                date.Add("333AAAAAAAAA[0]AAAAAAAAA");
                date.Add("222bbbbbbb[0]BBBBB");
                date.Add("333aaaaaaaa[0]aaaaaaa");            (from l in date
                 group l by l.Substring(l.IndexOf('['), l.IndexOf(']') - l.IndexOf('[') + 1) into ll
                 orderby ll.Key
                 select ll).ToList().ForEach(ll => ll.OrderBy(lll => lll).ToList().ForEach(lll => Console.WriteLine(lll)));给你个更完善的
      

  7.   

    先谢谢各位啦
    每条数据有3个[],并且保证前面数字一样的数据顺序不便date.Add("000d[d]d[d]ddd[3]dddddd");