如何使用字符串执行数字有效排序
本文关键字:数字 有效 排序 执行数 执行 何使用 字符串 | 更新日期: 2023-09-27 17:58:46
我有一个我称之为页面的项目列表。
每个页面项目都有以下内容:
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));
谢谢!
严格按照您的示例,您需要这样的东西:
pageList.Sort((a, b) => Int32.Parse(a.ImageName.Replace(".tif", "")).CompareTo(Int32.Parse(b.ImageName.Replace(".tif","")))
如果我理解你的问题,你想按自然数字顺序对"数字"文件名进行排序。
这篇文章可能会给你一些建议:http://www.codeproject.com/KB/recipes/csnsort.aspx
using System.Linq; // System.Core.dll
IEnumerable<Page> sequence = pageList.OrderBy(x => x.ImageName); // not in-place sort
List<Page> list = sequence.ToList();
如果您正在寻找一个对字母和数字顺序都敏感的排序顺序,比如在Windows资源管理器中找到的,这被称为"自然排序顺序"。
以下问题和答案将有所帮助:
C#中的自然排序
我相信:
pageList = pageList.GroupBy(p => p.filename.Substring(p.filename.IndexOf('.') + 1)).
OrderBy(g => g.Key).SelectMany(g => g.OrderBy(p => p.filename)).ToList();
会给你按扩展名然后按文件名排序的列表。