2016-07-30 3 views
1

문자열의 4 번째 문자를 기준으로 목록을 정렬하는 간단한 방법이 있습니까? 나는 그들 앞에 코드가있는 국가 목록을 가지고있다. "우리 미국은"내 목록에있는 하나의 문자열이며 전체 국가 이름 앞에 코드 ("미국")를 무시하고 싶습니다.문자열의 n 번째 문자로 목록 정렬 C#

답변

3
list.Sort((x, y) => x.Substring(3).CompareTo(y.Substring(3))); 
0

이 그것을해야 - List<string> 당신이 경우 문자를 낮추기 위해 대문자를 비교하지 않도록 이것은,

var l = new List<string>(){"us unites states","uk united kingdom","ca canada"}; 
foreach (var s in l.OrderBy(s => s.ToLower().Substring(3)).ToList()) 
    Console.WriteLine(s); 

ToLower 작동

[List<string>].OrderBy(s => s.Substring(3)).ToList(); 

변수 원래 목록 (이다 둘 다 가지고있는 경우)

1

다른 답변과 달리이 performi 예 : 이 아닌 불필요한 부분 문자열을 만듭니다. 대신 비교를 위해 문자열 오프셋을 허용하는 기존의 string.Compare(strA, indexA, strB, indexB, length) 오버로드를 이용합니다.

list.Sort((s1, s2) => string.Compare(s1, 3, s2, 3, int.MaxValue)); 

는 비교 동작을 조정할하는 데 사용할 수있는 또한, 오프셋 값을 받아 다른 유용한 string.Compare 과부하가 있습니다. (예 : 대소 문자 무시 등)

+0

+1 문자열 리터럴을 조작하지 않고 기존 비교 연산을 사용합니다. 내가 추가 할 길이 검사는's1'과's2'가 모두 4 자 이상이어야 함을 의미합니다 (잠재적 인 ArgumentOutOfRangeException을 피하기 위해) –

+1

@PhilGref 그리고 문자열이 3 문자보다 짧으면 어떻게해야합니까? ? 이를 무시하거나 사용자 정의 예외를 발생 시키거나 경고 플래그를 설정해야합니까? 알지 못하면 기본 오류 처리를 유지하는 것이 더 나은 옵션이 될 수 있습니다. – AlexD

관련 문제