C #: Как манипулировать списком <String>, используя выражение LINQ или LAMBDA - PullRequest
2 голосов
/ 01 октября 2010

У меня List<String> как

 List<String> MyList=new List<String>
    {
    "101010",
    "000000",
    "111000"
    };

Мне нужно создать новый список (List<String>) с помощью «MyList».поэтому строки в «MyList» становятся столбцами в новом списке, а столбцы становятся строками

Таким образом, результат будет выглядеть как

 {
    "101",
    "001",
    "101",
    "000",
    "100",
    "000"
  }

, теперь я использую цикл nested forсделать это.

Есть ли способ сделать это, используя LINQ или LAMBDA выражение

Ответы [ 3 ]

6 голосов
/ 01 октября 2010

Вот скрипт LINQPad , который добивается цели:

void Main()
{
    List<String> MyList = new List<String>
    {
        "101010",
        "000000",
        "111000"
    };
    Transpose(MyList).ToList().Dump();
}

static IEnumerable<String> Transpose(IEnumerable<String> strings)
{
    return from i in Enumerable.Range(0, strings.First().Length)
           select new string((from s in strings select s[i]).ToArray());
}

Выход:

101
001
101
000
100
000
2 голосов
/ 01 октября 2010
        int n = myList[0].Length; // or whatever

        var transposed = from ind in Enumerable.Range(0, n)
                         let sb = new StringBuilder()
                         select myList.Select(s => s[ind]).Aggregate(sb, (acc, next) => acc.Append(next));

        foreach (var s in transposed)
            Console.WriteLine(s);
1 голос
/ 01 октября 2010
var transposed = Enumerable.Range(0, MyList.First().Length)
                           .Select(rowIndex => new string(MyList.Select(str => str[rowIndex]).ToArray()))
                           .ToList();

Конечно, это сломается, если строки не одинаковой длины.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...