初始化对象
我有对象的2维数组的二维数组,我初始化采用传统的循环:初始化对象
PairDS[,] tempPb1 = new PairDS[LoopCounterMaxValue+1, LoopCounterMaxValue+1];
for (int i = 0; i <= LoopCounterMaxValue; i++)
for (int j = 0; j <= LoopCounterMaxValue; j++)
tempPb1[i, j] = new PairDS();
有没有更好的方式来做到这一点使用可枚举的东西?
我认为Initialize
可以做到这一点,但它只适用于值类型。
int N = 10;
PairDS[,] temp = new PairDS[N + 1, N + 1];
temp.Initialize();
我建议你做的是使用锯齿阵列。
class PairDS { public PairDS(int row, int col) { } }
static void Main(string[] args)
{
int N = 10;
PairDS[][] temp = Enumerable.Range(0, N + 1).Select(
(row) => Enumerable.Range(0, N + 1).Select(
(col) => new PairDS(row, col)).ToArray()).ToArray();
}
是的铁血阵列是另一个想法考虑的好主意。谢谢你的合作。 – user906763
我不相信你可以将多维数组表示为Enumerable或List,因为它(CLR)无法知道你打算如何索引数组。
如果你一行一行地完成它,它实际上会变得更糟(即更慢),然后简单地循环访问数组,并像初始化每个单元格一样。
没有办法用Enumerable
类型直接初始化二维数组,因为有些用户指出,你在做什么没有什么直接的错误。如果你只是想简化循环,尽管这可能是你正在寻找的;
const int length = LoopCounterMaxValue + 1;
PairDS[,] tempPb1 = new PairDS[length, lenth];
for (var i = 0; i < length * length; i++) {
var column = i % length;
var row = (i - column)/length;
tempPb1[row, column] = new PairDS();
}
这些操作%,/,*不会简化,需要更多的时间来了解正在发生的事情...... –
@archer我认为这是关于视角。我为一个人找到更容易阅读的原因,因为我已经使用过并且看过很多次。我确信一眼就不是那么简单。 OP的问题并不清楚他们的意图,我想通过删除嵌套来提供简化 – JaredPar
这种方式有什么不好? – Alxandr
什么也没有,但看起来很冗长。 –