Я пишу программу для мониторинга проектов рендеринга Blender.Но у меня проблема с сортировкой выходных данных блендера (3d-программа).он генерирует файлы в числовом формате.Или в каком-то тексте, который заканчивается в числовом формате.
Проблема здесь в том, что он нумеруется следующим образом:
someprojectname-0001.png
someprojectname-0010.png
someprojectname-10104.png
someprojectname-10105.png
someprojectname-9999.png
Возможно, перед цифрами будет какой-то текст, но проблема в том, что до сих порсортировка, которую я пробовал, видит 9999 выше, чем 10104 (некоторые считают, что проблема заключается в лишних цифрах, и число цифр не исправлено.
должно вывести
someprojectname-0001.png
someprojectname-0010.png
someprojectname-9999.png
someprojectname-10104.png
по существу, объединяет все числа (игнорирует любой текст), затем упорядочивает по номерам, поэтому я попытался:
d = new DirectoryInfo(renderpath);
// FileInfo[] files = d.GetFiles( rendertpye).OrderBy(p => p.Name).ToArray();
FileInfo[] files = d.GetFiles(rendertpye).OrderByDescending(o => string.IsNullOrEmpty(o.Name)).ThenBy(o =>
{
int result;
if (Int32.TryParse(o.Name, out result))
{ return result; }
else
{ return Int32.MaxValue; }
}).ToArray();
Я также попробовал Numeric beforeAlpha sort (https://www.codeproject.com/Tips/543502/Numeric-before-alpha-sort-in-LINQ) И я попробовал (https://www.dotnetperls.com/alphanumeric-sorting).
Проблема, хотя ни они не могут справиться с не фиксированной числовой длиной файла Blendersнумерация.
update Моя цель здесь не состоит в том, чтобы устанавливать правила о том, как люди сохраняют свои BlendFiles, программе требуется массив, который извлекает все сохраненные файлы, и сортирует их по числу в имени файла, которое может иметь переменный размер цифры.
Я попробовал это с linq, но я начинаю сомневаться, что это можно сделать напрямую с Linq.Хотя, может быть, если мы создадим список int на основе имени файла, то упорядочим этот список и используем его для упорядочения исходного текста с именем list.