我想制作具有不同列长度的2D锯齿状阵列作为具有相等列长度的2D阵列。
我尝试将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)
答案 0 :(得分:2)
你在两个时间都使用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(如果你想的话),但我没有打扰那个。
答案 1 :(得分:0)
这样的事情对你有用吗?
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);
}