如何将锯齿状数组制作成二维数组 C#

How to make jagged array to 2D array C#

我想将具有不同列长的二维锯齿状数组制作成具有相等列长的二维数组。 我尝试将 int[][] 转换为 List<List<int>>。 例如, 如何制作

int[][] = 
{0,1,1},
{1,1,1,1},
{1,1,1,1},
{0,1,1}

int[][] = 
{0,1,1,0},
{1,1,1,1},
{1,1,1,1},
{0,1,1,0}  // (inserting 0 to extended space)

这样的事情对你有用吗?

List<List<int>> jagged = ...

var maxLen = jagged.Max(x => x.Count);
for (var i=0; i<jagged.Count; i++){
    while (jagged[i].Count < maxLen) jagged[i].Add(0);
}

dotnetfiddle

你两次都使用 int[][],而不是替代 int[,],所以我将忽略术语并假设你只想填充 0 以使所有内容长度相同:

int[][] arr = ...

int maxLength = arr.Max(x => x.Length);
var arr2 = arr.Select(x =>
                      {
                          if (x.Length == maxLength)
                              return x;
                          var y = new int[maxLength];
                          x.CopyTo(y, 0);
                          return y;
                      }).ToArray();

// now arr2 is the same as arr but with uniform lengths and padded 0's at the end

此方法执行许多分配。另一种方法是:

List<List<int>> lists = ...

// with linq:
int maxLength = lists.Max(x => x.Count);

// without-linq:
int maxLength = 0;
foreach (var list in lists)
    if (list.Count > maxLength)
        maxLength = list.Count;
// end without-linq

foreach (List<int> list in lists)
    while (list.Count < maxLength)
        list.Add(0);

选择你更喜欢的,更适合你的情况。

您也可以避免在第一种方法中使用 Linq(如果需要),但我没有为那个费心。