排序(比较复杂)

Neusoft06 2012-04-18 10:41:08
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");

...全文
225 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
threenewbee 2012-04-19
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 的回复:]
对NET3.5以上真没那么复杂
先把[]中数字截取出来,再按照数字OrderBy就行了

C# code


List<string> date = new List<string>();
date.Add("000ddddddd[3]dddddd");
date.Add("000BBBBB[3]dddddd"……
[/Quote]

呵呵,你的linq进步很快。
EnForGrass 2012-04-19
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 的回复:]

对NET3.5以上真没那么复杂
先把[]中数字截取出来,再按照数字OrderBy就行了
C# code

List<string> date = new List<string>();
date.Add("000ddddddd[3]dddddd");
date.Add("000BBBBB[3]dddddd");
……
[/Quote]
写得不够完整,重贴一下

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());
}

督察的正则提取也不错
Neusoft06 2012-04-19
  • 打赏
  • 举报
回复
先谢谢各位啦
每条数据有3个[],并且保证前面数字一样的数据顺序不便

date.Add("000d[d]d[d]ddd[3]dddddd");

五更琉璃 2012-04-19
  • 打赏
  • 举报
回复

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)));

给你个更完善的
q107770540 2012-04-18
  • 打赏
  • 举报
回复

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
*/
}
EnForGrass 2012-04-18
  • 打赏
  • 举报
回复
对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");
*/
Neusoft06 2012-04-18
  • 打赏
  • 举报
回复
我的做法是把数据分解到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];

}

}
}
}

}
}

110,533

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

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