如何将数组列表转换为二维数组?

时间:2016-08-20 12:07:17

标签: visual-c++ collections c++-cli

我有一个数组列表,其中我添加了许多数组,但它们都是相同的大小。现在我想将此列表转换为二维数组。我试着用这种方式:

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> ^"

我不知道如何转换它。

1 个答案:

答案 0 :(得分:1)

您必须单独迭代并复制所有字符串。但是,原始类型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];
}

根据程序的其余部分以及List中实际存在的对象,有几个选项可供选择。以下是我看到的选项,按优先顺序排列。

  1. 而不是List<Array^>^vListList<array<String^>^>^。如果List真的是一个字符串数组列表,那么这个选项可能是最正确的。在这种情况下,arrayOfSomeSort^将为array<String^>^
  2. 如果vList无法更改类型,但确实包含字符串数组,那么我的本地变量innerArray的类型为array<String^>^,并且在将其从vList中拉出来时进行演员。
  3. 如果列表中的数组不是字符串数组,而是恰好包含字符串的对象数组,那么我就有array<Object^>^ innerArray,并转而使用它,并执行当您从String^中拉出每个字符串时,转换为innerArray
  4. 如果这些都不合适,那么您可以将innerArray保留为Array^类型。您需要调用显式方法Array.GetValue(int),而不是使用[]索引器。与前一个选项一样,当您将每个字符串拉出内部数组时,您需要将其转换为。
  5. 您已将第二个维度设置为5,而不检查内部数组的长度;我假设你知道我们不知道的东西,并且确定不会有大于5的东西。如果没有,你需要迭代列表一次以获得最大值数组大小,创建2D数组,然后复制字符串。