如何将数组列表转换为二维数组?
How to convert List of arrays to two dimensional array?
我有一个数组列表,我在其中添加了许多数组,但所有数组的大小都相同。现在我想将此列表转换为二维数组。我这样试过:
List<Array^>^ vList = gcnew List<Array^>();
//some code where I add elements to vList
array<String ^, 2> ^ anArray = gcnew array<String ^, 2>(vList->Count, 5);
anArray = vList->ToArray();
但是我遇到了这个错误:
a value of type "cli::array<System::Array ^, 1> ^" cannot be assigned to an entity of type "cli::array<System::String ^, 2> ^"
不知道怎么转换
您将不得不逐个迭代并复制所有字符串。但是,原始类型 Array^
使用起来并不方便,因此您需要为此做些事情。
基本上,您需要做的是:
for (int outer = 0; outer < vList->Count; outer++)
{
arrayOfSomeSort^ innerArray = vList[outer];
for (int inner = 0; inner < innerArray.Length; inner++)
anArray[outer, inner] = innerArray[inner];
}
根据程序其余部分的情况,以及列表中实际有哪些对象,有几个关于要做什么的选项。以下是我看到的选项,按优先顺序排列。
- 将
vList
设为 List<array<String^>^>^
而不是 List<Array^>^
。如果 List 确实是一个字符串数组列表,那么这个选项可能是最正确的。在这种情况下,arrayOfSomeSort^
将是 array<String^>^
.
- 如果
vList
不能改变类型,但它确实包含字符串数组,那么我会让局部变量 innerArray
成为 array<String^>^
类型,然后做一个将其从 vList
. 中拉出时投射
- 如果列表中的数组不是字符串数组,而是碰巧包含字符串的对象数组,那么我将使用
array<Object^>^ innerArray
,然后转换为它,然后转换为String^
当您从 innerArray
. 中拉出每个字符串时
- 如果其中 none 是合适的,那么您可以将
innerArray
保留为类型 Array^
。您需要调用显式方法 Array.GetValue(int)
而不是使用 []
索引器。与前面的选项一样,您需要在将每个字符串从内部数组中拉出时对其进行转换。
您在没有检查内部数组长度的情况下将第二个维度设置为 5;我假设你知道一些我们不知道的东西,并且确定不会有任何大于 5 的东西。如果没有,你需要迭代列表一次以获得最大数组大小,创建 2D 数组,然后复制字符串。
我有一个数组列表,我在其中添加了许多数组,但所有数组的大小都相同。现在我想将此列表转换为二维数组。我这样试过:
List<Array^>^ vList = gcnew List<Array^>();
//some code where I add elements to vList
array<String ^, 2> ^ anArray = gcnew array<String ^, 2>(vList->Count, 5);
anArray = vList->ToArray();
但是我遇到了这个错误:
a value of type "cli::array<System::Array ^, 1> ^" cannot be assigned to an entity of type "cli::array<System::String ^, 2> ^"
不知道怎么转换
您将不得不逐个迭代并复制所有字符串。但是,原始类型 Array^
使用起来并不方便,因此您需要为此做些事情。
基本上,您需要做的是:
for (int outer = 0; outer < vList->Count; outer++)
{
arrayOfSomeSort^ innerArray = vList[outer];
for (int inner = 0; inner < innerArray.Length; inner++)
anArray[outer, inner] = innerArray[inner];
}
根据程序其余部分的情况,以及列表中实际有哪些对象,有几个关于要做什么的选项。以下是我看到的选项,按优先顺序排列。
- 将
vList
设为List<array<String^>^>^
而不是List<Array^>^
。如果 List 确实是一个字符串数组列表,那么这个选项可能是最正确的。在这种情况下,arrayOfSomeSort^
将是array<String^>^
. - 如果
vList
不能改变类型,但它确实包含字符串数组,那么我会让局部变量innerArray
成为array<String^>^
类型,然后做一个将其从vList
. 中拉出时投射
- 如果列表中的数组不是字符串数组,而是碰巧包含字符串的对象数组,那么我将使用
array<Object^>^ innerArray
,然后转换为它,然后转换为String^
当您从innerArray
. 中拉出每个字符串时
- 如果其中 none 是合适的,那么您可以将
innerArray
保留为类型Array^
。您需要调用显式方法Array.GetValue(int)
而不是使用[]
索引器。与前面的选项一样,您需要在将每个字符串从内部数组中拉出时对其进行转换。
您在没有检查内部数组长度的情况下将第二个维度设置为 5;我假设你知道一些我们不知道的东西,并且确定不会有任何大于 5 的东西。如果没有,你需要迭代列表一次以获得最大数组大小,创建 2D 数组,然后复制字符串。