我有一个二维数组
var arr= new List<double[]>();内容:
1 2 3
4 3 7
7 8 9 10
11 我想把它像矩阵一样转到:
1 4 7 11
2 3 8
3 7 9
10 然后将10移动到第一步,比如:
1 4 7 11
2 3 8
3 7 9
10 我怎样才能有效地做到这一点?
发布于 2018-12-24 09:40:36
由于我们必须循环遍历所有数组“垂直”,我严重怀疑它是否比嵌套的
您可以找到一个最长的数组,并使用Linq、.Where和.Select进行重载,以接受索引:
var arr = new List<double[]>();
arr.Add(new double[] { 1, 2, 3});
arr.Add(new double[] { 4, 3, 7 });
arr.Add(new double[] { 7, 8, 9, 10 });
arr.Add(new double[] { 11 });
var longestArr = arr.OrderByDescending(a => a.Length).First();
var result = longestArr.Select((_, i) => arr.Where(a => a.Length > i).Select(a => a[i]).ToArray()).ToList();
foreach (var _ in result)
{
foreach (var element in _)
{
Console.Write(element + " ");
}
Console.WriteLine();
}或者对好老的for循环也这样做:
var longestArrLength = arr.Max(a => a.Length);
var result2 = new List<double[]>(arr.Count);
for (int i = 0; i < longestArrLength; i++)
{
result2.Add(arr.Where(a => a.Length > i).Select(a => a[i]).ToArray());
}两者的产出是:
1 4 7 11
2 3 8
3 7 9
10这是一个DotNetFiddle
https://stackoverflow.com/questions/53911446
复制相似问题