2011-08-22 152 views
3

我有对象的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(); 

有没有更好的方式来做到这一点使用可枚举的东西?

+1

这种方式有什么不好? – Alxandr

+0

什么也没有,但看起来很冗长。 –

回答

1

我认为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(); 
} 
+0

是的铁血阵列是另一个想法考虑的好主意。谢谢你的合作。 – user906763

1

我不相信你可以将多维数组表示为Enumerable或List,因为它(CLR)无法知道你打算如何索引数组。

如果你一行一行地完成它,它实际上会变得更糟(即更慢),然后简单地循环访问数组,并像初始化每个单元格一样。

1

没有办法用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(); 
} 
+2

这些操作%,/,*不会简化,需要更多的时间来了解正在发生的事情...... –

+0

@archer我认为这是关于视角。我为一个人找到更容易阅读的原因,因为我已经使用过并且看过很多次。我确信一眼就不是那么简单。 OP的问题并不清楚他们的意图,我想通过删除嵌套来提供简化 – JaredPar