2013-10-04 51 views
0

我想將string[][]轉換爲List<List<string>>將字符串的鋸齒陣列轉換爲C中字符串列表的列表#

例如。

List<List<string>> listOfListReturned = new List<List<string>>(); 
string[][] twoDArrOfString = new string[2][]; 

我想轉換twoDArrOfStringlistOfListReturned

請建議,該怎麼辦呢?

問候, 維韋克

+1

你不能只使用'toList()'? http://stackoverflow.com/questions/1603170/conversion-of-system-array-to-list – Dan

+0

@丹那麼會給你一個'List ',所以他不能只使用'ToList'。 –

回答

5

像下面也將工作:

string[][] twoDArrOfString = new string[2][]; 

var res = twoDArrOfString 
    .Where(inner => inner != null) // Cope with uninitialised inner arrays. 
    .Select(inner => inner.ToList()) // Project each inner array to a List<string> 
    .ToList(); // Materialise the IEnumerable<List<string>> to List<List<string>> 

你需要的,如果內部陣列尚未初始化處理空值。

如果你不打算列舉所有這些,你可能想放棄最後的ToList,並簡單地與IEnumerable<List<string>>作對,以避免解決所有內部列表,如果你不需要(利用延遲枚舉的執行)。

1

任何原因特別是你爲什麼要這麼做?

 List<List<string>> listOfListReturned = new List<List<string>>(); 
     string[][] twoDArrOfString = new string[2][]; 

     twoDArrOfString[0] = new[] {"a", "b"}; 
     twoDArrOfString[1] = new[] {"c", "d"}; 

     foreach (var s in twoDArrOfString) 
     { 
      listOfListReturned.Add(new List<string>(s)); 
     } 

或者

 var result = twoDArrOfString.ToList(); 
     var listOfList = result.Select(x => x.ToList()).ToList(); 
0

未測試想像吧:)

 for (int i = 0; i < twoDArrOfString.Length; i++) 
     { 
      for (int j = 0; j < twoDArrOfString[i].Length; j++) 
      { 
       listOfListReturned[i].Add(twoDArrOfString[j].ToString()); 
      } 
      listOfListReturned.Add(listOfListReturned[i]); 
     } 
0

更LINQ十歲上下的版本可能

List<List<string>> listOfListReturned = new List<List<string>>() 
    { 
     new List<string> {"A", "B"}, 
     new List<string> {"C", "D"}, 
    }; 

string[][] twoDArrOfString = new string[2][] 
    { 
     new [] {"A", "B"}, 
     new []{"C", "D"}, 
    }; 

var actual = twoDArrOfString.Select(arr => new List<string>(arr)).ToList(); 

for (var idx = 0; idx < listOfListReturned.Count; idx++) { 
    CollectionAssert.AreEqual(listOfListReturned[idx], actual[idx]); 
} 

編輯:上面的允許空行亞當的解決方案是更好的。