2014-06-09 51 views
1

我有一个自定义类Gene如何声明这个嵌套的数组/列表?

我要声明一个数组或列表(或别的东西不管是更好)命名_slots与400位...像_slots[400]

每个_slot都必须包含解决方案。然而,一个解决方案是100 像这样我的自定义Gene类的数组:

 _Slots 
    ------------- 
0 | Gene[100] | 
    -------------- 
1 | Gene[100] | 
    -------------- 
2 | Gene[100] | 
    -------------- 
3 | Gene[100] | 
    -------------- 
4 | Gene[100] | 
    -------------- 
... 
400 | Gene[100] | 
    -------------- 

什么是声明这一点,很容易获得所有成员的最佳方式?

回答

2

A 很多更好的方法是创建一个代表Slot的类,该类继而管理Gene的100个实例。

然后,有400个插槽阵列(或IEnumerableList<Slot>,以适合您的需求为准)。

public class Slot 
{ 
    private Gene[] _genes; 

    public Gene this[int index] 
    { 
     get{ return _genes[index];} 
     set{ _genes[index] = value;} 
    } 

    public Slot(int count = 100) 
    { 
     _genes = new Gene[count]; 
    } 
}  

IList<Slot> slotsList = Enumerable.Range(0,400) 
           .Select(i => new Slot()) 
           .ToList(); 

//or an enumerable 
IEnumerable<Slot> slots = slotsList; 

//or an array 
Slot[] slotsArray = slotsList.ToArray(); 
+0

完美的设定值的变量。遗传算法中使用的最佳类型是什么?的IEnumerable /列表/数组? – Ray

+0

@射线取决于您的要求。一般来说,你会想使用最抽象的类型。如果你只需要遍历'slots',然后使用'IEnumerable '。如果你想迭代*和*交换插槽,或者给一个给定的索引分配一个新的'Slot',那么使用一个数组。如果你想迭代,设置新的插槽*和*缩小/增加插槽列表,然后使用'List '。 – dcastro

+0

次要更新:如果使用'Enumerable.Range()。Select()',不要忘记调用'ToList' /'ToArray'。 – dcastro

1

尝试使用

List<Gene[]> MegaList = new List<Gene[]>(); 
MegaList.Add(new Gene[100]); 
MegaList[0][0] = new Gene(); 

我强烈建议把这个包功能集成到一流的,它可以让你在将来轻松地扩展, FE:

public class MultiArray<T> : List<T> { } 
... 
MultiArray<Gene[]> Storage = new MultiArray<Gene[]>(); 
1

由于长度每个维度都是相同的,一个二维数组似乎是合乎逻辑的。

Gene[,] 

备选地,可以使用一个List<Gene[]>如果阵列的数目是代替400

1
List<Gene>[] lst = new List<Gene>[400];