我有List<String>
喜欢
List<String> MyList=new List<String>
{
"101010",
"000000",
"111000"
};
我需要使用“MyList”创建一个新列表(List<String>
)。所以“MyList”中的行成为新List中的列,列成为行
所以结果就像
{
"101",
"001",
"101",
"000",
"100",
"000"
}
现在我正在使用nested for
循环来执行此操作。
有没有办法使用LINQ
或LAMBDA
表达式
答案 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();
当然,如果字符串长度不相同,这将会中断。