Как я могу выполнить числовую правильную сортировку, используя строки? - PullRequest
3 голосов
/ 08 июня 2011

У меня есть список элементов, которые я называю страницами.

Каждый элемент страницы имеет следующее:

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 ]

2 голосов
/ 08 июня 2011

Строго следуя вашему примеру, вам нужно что-то вроде этого:

pageList.Sort((a, b) => Int32.Parse(a.ImageName.Replace(".tif", "")).CompareTo(Int32.Parse(b.ImageName.Replace(".tif","")))
1 голос
/ 08 июня 2011

Если вы ищете порядок сортировки, чувствительный как к алфавитному, так и к числовому порядку, например, в Windows Explorer, это называется «естественным порядком сортировки».

Следующий вопрос и ответ будут полезны:

Естественный порядок сортировки в C #

1 голос
/ 08 июня 2011

Если я правильно понял ваш вопрос, вы хотите отсортировать «числовые» имена файлов в натуральном числовом порядке.

Эта статья может дать вам несколько указателей: http://www.codeproject.com/KB/recipes/csnsort.aspx

1 голос
/ 08 июня 2011
using System.Linq; // System.Core.dll

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

List<Page> list = sequence.ToList();
0 голосов
/ 08 июня 2011

Я полагаю:

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

Даст вам список, упорядоченный по расширению, а затем по имени файла.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...