2017-04-25 92 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()解決您可以使用此方法

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

否則我會concartenate所有項目到一個單一的string和比較這些。

這效率較低,因爲必須先創建字符串對象。

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(); 
相關問題