C# 如何声明此嵌套数组/列表?

C# 如何声明此嵌套数组/列表?,c#,arrays,list,C#,Arrays,List,我有一个自定义类Gene 我想声明一个名为\u slots的数组或列表(或其他更好的东西),有400个位置…类似于\u slots[400] 每个\u插槽必须包含一个解决方案。然而,一个解决方案是一个100的自定义类Gene数组。 大概是这样的: _Slots ------------- 0 | Gene[100] | -------------- 1 | Gene[100] | -------------- 2 | Gene[100] |

我有一个自定义类
Gene

我想声明一个名为
\u slots
的数组或列表(或其他更好的东西),有400个位置…类似于
\u slots[400]

每个
\u插槽必须包含一个解决方案。然而,一个解决方案是一个100的自定义类
Gene
数组。 大概是这样的:

       _Slots
    -------------
0   | Gene[100] |
    --------------
1   | Gene[100] |
    --------------
2   | Gene[100] |
    --------------
3   | Gene[100] |
    --------------
4   | Gene[100] |
    --------------
...
400 | Gene[100] |
    --------------
声明此项并方便访问所有成员的最佳方法是什么?

更好的方法是使用一个表示
插槽的类,该类反过来管理
Gene
的100个实例

然后,有一个400个插槽的数组(或一个
IEnumerable
,或一个
列表
,以适合您的需要为准)

公共类插槽
{
私有基因[]_基因;
公共基因这个[int索引]
{
获取{return _genes[index];}
集合{u基因[index]=value;}
}
公共插槽(整数计数=100)
{
_基因=新基因[计数];
}
}    
IList slotsList=可枚举的范围(0400)
.选择(i=>newslot())
.ToList();
//或可枚举的
IEnumerable插槽=插槽列表;
//还是数组
Slot[]slotsArray=slotsList.ToArray();
更好的方法是使用一个表示
插槽的类,该插槽反过来管理
Gene
的100个实例

然后,有一个400个插槽的数组(或一个
IEnumerable
,或一个
列表
,以适合您的需要为准)

公共类插槽
{
私有基因[]_基因;
公共基因这个[int索引]
{
获取{return _genes[index];}
集合{u基因[index]=value;}
}
公共插槽(整数计数=100)
{
_基因=新基因[计数];
}
}    
IList slotsList=可枚举的范围(0400)
.选择(i=>newslot())
.ToList();
//或可枚举的
IEnumerable插槽=插槽列表;
//还是数组
Slot[]slotsArray=slotsList.ToArray();
尝试使用

List<Gene[]> MegaList = new List<Gene[]>();
MegaList.Add(new Gene[100]);
MegaList[0][0] = new Gene();
List MegaList=新列表();
MegaList.Add(新基因[100]);
MegaList[0][0]=新基因();
我强烈建议将此功能包装到类中,它将允许您在将来轻松地扩展它, f、 e:

公共类多数组:列表{}
...
多阵列存储=新的多阵列();
尝试使用

List<Gene[]> MegaList = new List<Gene[]>();
MegaList.Add(new Gene[100]);
MegaList[0][0] = new Gene();
List MegaList=新列表();
MegaList.Add(新基因[100]);
MegaList[0][0]=新基因();
我强烈建议将此功能包装到类中,它将允许您在将来轻松地扩展它, f、 e:

公共类多数组:列表{}
...
多阵列存储=新的多阵列();

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

Gene[,]

或者,如果数组的数量是可变的,而不是设置值400,则可以使用
列表
,因为每个维度的长度相同,所以二维数组似乎是合乎逻辑的

Gene[,]
   List<Gene>[] lst = new List<Gene>[400];
或者,如果数组的数量是可变的,而不是400的设定值,则可以使用
列表
   List<Gene>[] lst = new List<Gene>[400];
List[]lst=新列表[400];

完美。在遗传算法中使用的最佳类型是什么?iEnumerable/List/array?@Ray取决于您的需求。通常,您希望使用最抽象的类型。如果您只需要在
插槽中进行迭代
,则使用
IEnumerable
。如果要迭代和交换插槽,或为给定索引分配新的
Slot
,请使用数组。如果要迭代,请设置新插槽并缩小/扩大插槽列表,然后使用
列表
。次要更新:如果使用
Enumerable.Range().Select()
,请不要忘记调用
ToList
/
ToArray
.perfect。在遗传算法中使用的最佳类型是什么?iEnumerable/List/array?@Ray取决于您的需求。通常,您希望使用最抽象的类型。如果您只需要在
插槽中进行迭代
,则使用
IEnumerable
。如果要迭代和交换插槽,或为给定索引分配新的
Slot
,请使用数组。如果要迭代,请设置新插槽并缩小/扩大插槽列表,然后使用
列表
。次要更新:如果使用
Enumerable.Range().Select()
,请不要忘记调用
ToArray