List<List<double>> A = new List<List<double>>()
{
new List<double>() { 1, 0, 0 },
new List<double>() { 1, -1, 0 }
};
List<List<double>> Temm = new List<List<double>>();
for (int i = 0; i < A.Count; i++)
{
for (int j = 0; j < A[i].Count; j++)
{
if (A[i][j] != 0)
{
Temm[i][j] = A[i][j];
}
else
{
Temm[i][j] = Temm[i][j - 1]; }
}
}
}
这个double for循环有问题,我认为Temm[i][j]
可能是非法的,那么正确的方法是什么?我还想知道如何声明二维List
List<List<double>> Temm = new List<List<double>>
说
Z * Y
?
答案 0 :(得分:3)
你有两个问题。
当您尝试访问[i] [j]时 - 还有一个尚未存在的 - 这是每次失败。而是使用Insert
方法:
List<List<double>> A = new List<List<double>>()
{
new List<double>() { 1, 0, 0 },
new List<double>() { 1, -1, 0 }
};
List<List<double>> Temm = new List<List<double>>(A.Count);
for (int i = 0; i < A.Count; i++)
{
Temm.Insert(i,new List<double>());
for (int j = 0; j < A[i].Count; j++)
{
if (A[i][j] != 0) { Temm[i].Insert(j,A[i][j]); }
else { Temm[i].Insert(j,Temm[i][j - 1]); }
}
}
因为每次插入列表末尾我都希望使用Add
:
List<List<double>> B = new List<List<double>>();
for (int i = 0; i < A.Count; i++)
{
List<double> innerResult = new List<double>();
for (int j = 0; j < A[i].Count; j++)
{
if (A[i][j] != 0)
{
innerResult.Add(A[i][j]);
}
else
{
innerResult.Add(innerResult[j - 1]);
}
}
B.Add(innerResult);
}
答案 1 :(得分:2)
我认为Temm [i] [j]可能是非法的
是的。请改用[i,j]
。
我也想知道如何声明两者的给定大小 维度列表
正确的方法是:
List<List<double>> Temm = new List<List<double>>();
for (int i=0; i<A.Count; i++)
{
Temm[i] = new List<double>();
//Your code
答案 2 :(得分:1)
对于数组,请使用[i,j]
对于列表,初始化外部列表的所有元素。
List<List<double>> Temm = new List<List<double>>();
for (var i=0; i<i_max; i++)
Temm.Add( new List<double>() );
答案 3 :(得分:1)
Temm [i] [j]不违法。在这种情况下使用列表,它是访问内部列表的项目而不使用其间的变量的唯一方法。 Temm[i][j]
相当于var temmInner = Temm[i]; ... temmInner[j] ...
如果您有多维数组,则只能使用[i, j]
,而不是数组数组(或代码中的列表列表)。
您无法声明List
的大小。充其量你可以给它一个起始容量(当你向列表中添加更多项目时会增加)
我在您的代码中看到的一个错误是您从未向Temm
添加新列表,因此我建议您将代码更改为:
List<List<double>> Temm = new List<List<double>>();
for (int i = 0; i < A.Count; i++)
{
Temm.Add(new List<double>());
for (int j = 0; j < A[i].Count; j++)
{
double temmValue;
if (A[i][j] != 0) { temmValue = A[i][j]; }
else { temmValue = Temm[i][j - 1]; }
Temm[i].Add(temmValue)
}
}
btw一些非常可疑的代码是if (A[i][j] != 0) { ... } else { ... Temm[i][j - 1]; }
你现在依赖于内部A
列表的第一项永远不是0的事实。检查j == 0
可能是个好主意。同样。
答案 4 :(得分:0)
List<List<double>> Temm = new List<List<double>>();
for (int i = 0; i < A.Count; i++)
{
Temm.Add(A[i]);
for (int j = 0; j < A[i].Count; j++)
{
if (A[i][j] != 0)
{
Temm[i][j] = A[i][j];
}
else
{
Temm[i][j] = Temm[i][j - 1];
}
}
}