首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在每一行上转置长度随机的二维数组?

如何在每一行上转置长度随机的二维数组?
EN

Stack Overflow用户
提问于 2018-12-24 09:20:19
回答 1查看 125关注 0票数 2

我有一个二维数组

代码语言:javascript
复制
var arr= new List<double[]>();

内容:

代码语言:javascript
复制
1   2   3
4   3   7   
7   8   9   10
11  

我想把它像矩阵一样转到:

代码语言:javascript
复制
1   4   7   11
2   3   8   
3   7   9   
        10  

然后将10移动到第一步,比如:

代码语言:javascript
复制
1   4   7   11
2   3   8   
3   7   9   
10          

我怎样才能有效地做到这一点?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-12-24 09:40:36

由于我们必须循环遍历所有数组“垂直”,我严重怀疑它是否比嵌套的

您可以找到一个最长的数组,并使用Linq、.Where.Select进行重载,以接受索引:

代码语言:javascript
复制
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循环也这样做:

代码语言:javascript
复制
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());
}

两者的产出是:

代码语言:javascript
复制
1 4 7 11
2 3 8
3 7 9
10

这是一个DotNetFiddle

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/53911446

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档