2014-06-09 50 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];