C#字符串数组排序问题

baofen14787 2010-10-13 09:04:09
有个array:

string[333] fileList = {"list_1.htnl","list_10.html","list_100.html","list_101.html"......,"list_109.html","list_11.html"......}


意思就是,字符串默认的排序并不是按照这种最末尾的数字排序的。
我想要生成排序为这样的数组.

string[333] fileList = {"list_1.htnl","list_2.html","list_3.html","list_4.html"......,"list_100.html","list_101.html"......}


就是排序是按照最末尾的那个数字的大小来排序。这个数字是递增的。1---333。

不知道我说清楚了没。好心人提供下代码吧。
...全文
3189 35 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
35 条回复
切换为时间正序
请发表友善的回复…
发表回复
purplesharp 2011-04-08
  • 打赏
  • 举报
回复
呵呵,一个字符串的处理学问都很多啊
q107770540 2010-10-13
  • 打赏
  • 举报
回复
不清楚你到底想要什么样的结果

你在20楼的回复和你最开始提的 有点让人搞不懂了

333的数据长度太长

你提取其中10个 把排序前的和排序后的帖一下来看看
bloodish 2010-10-13
  • 打赏
  • 举报
回复
3#的答案就是你要求的,楼主你有去执行一下代码吗?
baofen14787 2010-10-13
  • 打赏
  • 举报
回复
谢谢大家的回复。但我要的不是这个


[Quote=引用 3 楼 q107770540 的回复:]

C# code

void Main()
{
string[] fileList =new string[] {"list_1.htnl","list_10.html","list_100.html","list_111.html","list_109.html","list_11.html"};
fileList= fileList.OrderBy(s =>……
[/Quote]


我想输出的是:
list_1.htnl
list_2.htnl
list_3.htnl
list_4.htnl
list_5.htnl
。。。。
Marco2752 2010-10-13
  • 打赏
  • 举报
回复
学习了~~~
3000sunqin 2010-10-13
  • 打赏
  • 举报
回复
IEnumerable 不实现排序
IComparable 也不实现排序
IComparable 只是实现大小比较
在Sort方法中会调用具体对象实现的IComparable接口的Compare方法。
tanbin_0521 2010-10-13
  • 打赏
  • 举报
回复
using System.Linq;


string[333] fileList = {"list_1.htnl","list_10.html","list_100.html","list_101.html"......,"list_109.html","list_11.html"......}

var fileList = fileList.OrderBy(s => int.Parse(Regex.Match(s, @"\d+").Value)).ToArray();

foreach (var grop in fileList)
{
Response.Write(grop + " ");
}
fengyuananan 2010-10-13
  • 打赏
  • 举报
回复
3楼的方法简单,学习了。。。
damjmk2 2010-10-13
  • 打赏
  • 举报
回复
[Quote=引用 13 楼 viena 的回复:]
引用 9 楼 damjmk2 的回复:
取出来的整形就能比较这个我懂...但是源类型不是string 吗..我的意思是中间实现的机制是什么样的?


晕,int.Parse不懂?
[/Quote]


int/Parse当然懂,说白了我是想知道 IEnumerable 怎么实现排序的
wuyq11 2010-10-13
  • 打赏
  • 举报
回复
string[] arr = { "",.. };
var result = (from a in arr
let pos = a.IndexOf('-')
let left = int.Parse(a.Substring(0, pos))
let right = int.Parse(a.Substring(pos + 1).Replace(".html",""))
orderby right
select a).ToArray();
baofen14787 2010-10-13
  • 打赏
  • 举报
回复
经过试验,3楼正解。正则表达我改成:\d+(?=.htm)

因为文件名有可能是list_133_1.htm 之类的。不一定只有最后一个才是数字。。

好了 结贴咯
viena 2010-10-13
  • 打赏
  • 举报
回复
[Quote=引用 9 楼 damjmk2 的回复:]
取出来的整形就能比较这个我懂...但是源类型不是string 吗..我的意思是中间实现的机制是什么样的?
[/Quote]

晕,int.Parse不懂?
hongjiaoli 2010-10-13
  • 打赏
  • 举报
回复
可以foreach循环遍历 字符串,分割字符串,判断后再替换。
amandag 2010-10-13
  • 打赏
  • 举报
回复
用linq是快...,效率可能低些

Regex.Match(s, @"\d+") 是正则匹配, \d+表示1个或多个数字字符
shaoliang520xi 2010-10-13
  • 打赏
  • 举报
回复
牛!顶了
damjmk2 2010-10-13
  • 打赏
  • 举报
回复
取出来的整形就能比较这个我懂...但是源类型不是string 吗..我的意思是中间实现的机制是什么样的?
q107770540 2010-10-13
  • 打赏
  • 举报
回复
使用正则提取数组中每个值中的数字 如list_111.html中提取111
根据数字大小进行升序排列
damjmk2 2010-10-13
  • 打赏
  • 举报
回复
....这句 s =>int.Parse( Regex.Match(s, @"\d+").Value 不太懂

CSDN上的泛型例子是这样的: IEnumerable<Pet> query = pets.OrderBy(pet => pet.Age);
pet.Age 好理解 上面那句不太好懂
q107770540 2010-10-13
  • 打赏
  • 举报
回复
这是linq的语法,.net framework 3.0以上才支持
damjmk2 2010-10-13
  • 打赏
  • 举报
回复
猫哥厉害...OrderBy() 学习了
加载更多回复(14)

111,096

社区成员

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

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

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