Как преобразовать IEnumerable‹IEnumerable‹T›› в список‹string›?

Я действительно еще не понимаю эту вещь T. Мне нужно преобразовать результат ниже в список

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();

person MonsterMMORPG    schedule 06.06.2013    source источник
comment
Без оскорблений, но вы понимаете, что делает ваш код?   -  person gunr2171    schedule 06.06.2013
comment
я не понимаю часть GetPermutations, так как я ее не кодировал. вот почему я спрашиваю :D @gunr2171   -  person MonsterMMORPG    schedule 06.06.2013


Ответы (2)


Для любого IEnumerable<IEnumerable<T>> мы можем просто вызвать SelectMany.

Пример:

IEnumerable<IEnumerable<String>> lotsOStrings = new List<List<String>>();
IEnumerable<String> flattened = lotsOStrings.SelectMany(s => s);
person MgSam    schedule 06.06.2013

Поскольку lstShuffle реализует IEnumerable<string>, вы можете мысленно заменить T на string: вы звоните IEnumerable<IEnumerable<string>> GetPermutations(IEnumerable<string> items).

Как говорит Алекси, SelectMany(x => x) — это самый простой способ превратить IEnumerable<IEnumerable<T>> в IEnumerable<T>.

person dahlbyk    schedule 06.06.2013