C#:如何使用LINQ或LAMBDA表达式</string>操作List <string>

时间:2010-10-01 10:03:32

标签: c# linq lambda

我有List<String>喜欢

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

我需要使用“MyList”创建一个新列表(List<String>)。所以“MyList”中的行成为新List中的列,列成为行

所以结果就像

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

现在我正在使用nested for循环来执行此操作。

有没有办法使用LINQLAMBDA表达式

执行此操作

3 个答案:

答案 0 :(得分:6)

这是一个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

答案 1 :(得分:2)

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

答案 2 :(得分:1)

var transposed = Enumerable.Range(0, MyList.First().Length)
                           .Select(rowIndex => new string(MyList.Select(str => str[rowIndex]).ToArray()))
                           .ToList();

当然,如果字符串长度不相同,这将会中断。