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
。