실제로 문자열 목록에 숫자와 문자가 들어있는 장면 번호 목록을 정렬해야합니다. 숫자와 문자가 포함 된 문자열 정렬
이
나에게 그것은 단지 첫 번째 숫자를 정렬하는 것처럼 보이는101-8
101-8A
101-9
102-1
103-4
103-4B
101-10
101-11
103-10
다음과 같은 결과를 제공하는 비교 자
public class SceneComparer : IComparer
{
private readonly Regex sceneRegEx = new Regex(@"(\D*)(\w*)", RegexOptions.Compiled);
public int Compare(object x, object y)
{
Scene sceneX = x as Scene;
Scene sceneY = y as Scene;
var firstSceneMatch = this.sceneRegEx.Match(sceneX.SceneNumber);
var firstSceneNumeric = Convert.ToInt32(firstSceneMatch.Groups[1].Value);
var firstSceneAlpha = firstSceneMatch.Groups[2].Value;
var secondSceneMatch = this.sceneRegEx.Match(sceneY.SceneNumber);
var secondSceneNumeric = Convert.ToInt32(secondSceneMatch.Groups[1].Value);
var secondSceneAlpha = secondSceneMatch.Groups[2].Value;
if (firstSceneNumeric < secondSceneNumeric)
{
return -1;
}
if (firstSceneNumeric > secondSceneNumeric)
{
return 1;
}
return string.CompareOrdinal(firstSceneAlpha, secondSceneAlpha);
}
}
다음
101-11
102-1
101-10
101-8
103-10
101-8A
101-9
103-4
103-4B
내가 만들어 놓은 목록을하다 대시와 영숫자 앞에 있지만 대시 뒤의 번호는 정렬되지 않습니다. 원하는 결과를 얻습니다.
101-8
101-8A
101-9
101-10
101-11
102-1
103-4
103-4B
103-10
원하는 결과를 얻는 방법에 대한 아이디어.
"-"를 사용하여 문자열을 분할합니다. 단락 기호는 튜플으로 분리 한 다음 LINQ를 사용하여 Item1, Item2 순으로 정렬합니다. –
Yobik