728x90
문자와 숫자가 섞여 있는 경우 문자와 숫자를 정렬해준다.
원본
a1
a12
a2
b2
b1
b11
결과
a1
a2
a12
b1
b2
b11
public static IEnumerable<string> NaturalSort(IEnumerable<string> list)
{
int maxLen = list.Select(s => s.Length).Max();
Func<string, char> PaddingChar = s => char.IsDigit(s[0]) ? ' ' : char.MaxValue;
return list
.Select(s =>
new
{
OrgStr = s,
SortStr = Regex.Replace(s, @"(\d+)|(\D+)", m => m.Value.PadLeft(maxLen, PaddingChar(m.Value)))
})
.OrderBy(x => x.SortStr)
.Select(x => x.OrgStr);
}
{
int maxLen = list.Select(s => s.Length).Max();
Func<string, char> PaddingChar = s => char.IsDigit(s[0]) ? ' ' : char.MaxValue;
return list
.Select(s =>
new
{
OrgStr = s,
SortStr = Regex.Replace(s, @"(\d+)|(\D+)", m => m.Value.PadLeft(maxLen, PaddingChar(m.Value)))
})
.OrderBy(x => x.SortStr)
.Select(x => x.OrgStr);
}
728x90
'C# > Winform' 카테고리의 다른 글
(.NET) 디컴파일러 (decompiler) - dotPeek, JustDecompile (11) | 2017.07.28 |
---|---|
(C#) FormBorderStyle 이 None 인 경우 Form 이동 가능하게 하는 방법 (0) | 2017.07.28 |
링크 - http://csharphelper.com/blog/ (0) | 2017.07.14 |
개발 관련 eBook - 링크 (0) | 2017.07.13 |
(ASP.NET) ComboBox - 링크 (0) | 2017.07.11 |