如何使用字符串执行数值有效的排序?

时间:2011-06-08 19:13:58

标签: c# .net list sorting

我有一个我称之为页面的项目列表。

每个页面项目都包含以下内容:

int id { get; set; }
string filename { get; set; }
int status  { get; set; }

我遇到的问题是文件名字段的排序方式如下:

1.tif
10.tif

我需要在列表中按顺序排序:

1.tif
2.tif

我没有运气就尝试了以下内容:

pageList.Sort((a, b) => String.Compare(a.ImageName, b.ImageName));

谢谢!

5 个答案:

答案 0 :(得分:2)

严格按照你的例子,你需要这样的东西:

pageList.Sort((a, b) => Int32.Parse(a.ImageName.Replace(".tif", "")).CompareTo(Int32.Parse(b.ImageName.Replace(".tif","")))

答案 1 :(得分:1)

using System.Linq; // System.Core.dll

IEnumerable<Page> sequence = pageList.OrderBy(x => x.ImageName); // not in-place sort

List<Page> list = sequence.ToList();

答案 2 :(得分:1)

如果我理解你的问题,你想用自然数字顺序对“数字”文件名进行排序。

本文可能会给您一些指示:http://www.codeproject.com/KB/recipes/csnsort.aspx

答案 3 :(得分:1)

如果您正在寻找对字母和数字顺序敏感的排序顺序(例如Windows资源管理器中的排序顺序),则称为“自然排序顺序”。

以下问答将有所帮助:

Natural Sort Order in C#

答案 4 :(得分:0)

我相信:

pageList = pageList.GroupBy(p => p.filename.Substring(p.filename.IndexOf('.') + 1)).
    OrderBy(g => g.Key).SelectMany(g => g.OrderBy(p => p.filename)).ToList();

会为您提供按扩展名排序的列表,然后按文件名列出。