2017-04-25 3 views
4

현재 빈번한 시퀀스를 생성하는 코드를 구현하려고합니다. 내가 필요로하는사전 순으로 정렬 된 문자열 목록 목록

List<List<string>> myList = new List<List<string>>(); 
List<string> input1 = new List<string>() {"a", "b", "d"}; 
List<string> input2 = new List<string>() {"a", "b", "c"}; 
myList.Add(input1); 
myList.Add(input2); 

출력은 다음과 같습니다 :

myList = {{"a","b","c"},{"a","b","d"}}; 

나는 myList.Sort()을 사용하려고하지만 한 다음 그 과정에서 나는 문자열 목록의 목록에서 적절한 종류를 얻을 필요 그것은 System.InvalidOperationException를 모금했다. LINQ에는별로 좋지 않아서 그런 종류의 것을 사용하지 않았습니다.

+0

스택 추적 및 라인을 사용할 수 있습니다. –

답변

2

:

myList = myList.OrderBy(s => string.Join(string.Empty, s)).ToList(); 

트릭 아이리스트의 각 요소의 연결에 의해 만들어진 문자열에 따라 분류하는 것입니다. 당신은 코드 아래에 시도 할 수 있습니다

1

당신이 Sort()으로 해결하려면 당신이 그렇지 않으면 내가 하나의 string에있는 모든 항목을 concartenate 그 비교 것이이 방법

myList.Sort((x, y) => x.Zip(y,(l1,l2) => string.Compare(l1,l2)).FirstOrDefault(c => c != 0)); 

를 사용할 수 있습니다.

문자열 개체를 먼저 만들어야하기 때문에 효율성이 떨어집니다.

myList = myList.OrderBy(string.Concat).ToList(); 

샘플 : https://dotnetfiddle.net/1VmohI에 대해 어떻게

0

:

 List<string> input1 = new List<string>() { "a", "b", "d" }; 
     List<string> input2 = new List<string>() { "a", "b", "c" }; 

     //Instead of adding input as List<string>, add it as string 
     string delimiter = ","; 
     var input1Str = input1.Aggregate((i, j) => i + delimiter + j); 
     var input2Str = input2.Aggregate((i, j) => i + delimiter + j); 

     var myListStr = new List<string>(); 
     myListStr.Add(input1Str); 
     myListStr.Add(input2Str); 

     myListStr.Sort(); 
     //Now you can convert it into List<List<string>> 
     List<List<string>> myList = myListStr.Select(x => x.Split(',').ToList()).ToList(); 
0

은 또한 예외가 아마 도움이 될 것입니다 발생

myList = myList.OrderBy(arr => arr[0]) 
       .ThenBy(arr => arr[1]) 
       .ThenBy(arr => arr[2]) 
       .ToList();