2013-06-06 182 views
1

我真的不明白這個T的東西呢。我需要將以下結果轉換爲列表如何將IEnumerable <IEnumerable <T>>轉換爲列表<string>?

private void generateKeywords_Click(object sender, RoutedEventArgs e) 
{ 
    string srText = new TextRange(
    txthtmlsource.Document.ContentStart, 
    txthtmlsource.Document.ContentEnd).Text; 
    List<string> lstShuffle = srText.Split(' ') 
     .Select(p => p.ToString().Trim().Replace("\r\n", "")) 
     .ToList<string>(); 
    lstShuffle = GetPermutations(lstShuffle) 
     .Select(pr => pr.ToString()) 
     .ToList(); 
} 

public static IEnumerable<IEnumerable<T>> GetPermutations<T>(
               IEnumerable<T> items) 
{ 
    if (items.Count() > 1) 
    { 
     return items 
      .SelectMany(
      item => GetPermutations(items.Where(i => !i.Equals(item))), 
      (item, permutation) => new[] { item }.Concat(permutation)); 
    } 
    else 
    { 
     return new[] { items }; 
    } 
} 

這條線以下失敗,因爲我無法正確轉換。我的意思是不是錯誤,但不是字符串列表或者

lstShuffle = GetPermutations(lstShuffle).Select(pr => pr.ToString()).ToList(); 
+1

沒有侮辱意,但你理解你的代碼做了什麼? – gunr2171

+1

我不明白GetPermutations部分,因爲我沒有編碼。這就是爲什麼我問:D @ gunr2171 – MonsterMMORPG

回答

9

對於任何IEnumerable<IEnumerable<T>>,我們可以簡單地撥打SelectMany

例子:

IEnumerable<IEnumerable<String>> lotsOStrings = new List<List<String>>(); 
IEnumerable<String> flattened = lotsOStrings.SelectMany(s => s); 
2

由於lstShuffle工具IEnumerable<string>,你可以精神上Tstring替代:你打電話IEnumerable<IEnumerable<string>> GetPermutations(IEnumerable<string> items)

正如Alexi所說,SelectMany(x => x)是將IEnumerable<IEnumerable<T>>拼合成IEnumerable<T>的最簡單方法。

相關問題