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

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];
}

根据程序其余部分的情况,以及列表中实际有哪些对象,有几个关于要做什么的选项。以下是我看到的选项,按优先顺序排列。

  1. vList 设为 List<array<String^>^>^ 而不是 List<Array^>^。如果 List 确实是一个字符串数组列表,那么这个选项可能是最正确的。在这种情况下,arrayOfSomeSort^ 将是 array<String^>^.
  2. 如果 vList 不能改变类型,但它确实包含字符串数组,那么我会让局部变量 innerArray 成为 array<String^>^ 类型,然后做一个将其从 vList.
  3. 中拉出时投射
  4. 如果列表中的数组不是字符串数组,而是碰巧包含字符串的对象数组,那么我将使用 array<Object^>^ innerArray,然后转换为它,然后转换为String^ 当您从 innerArray.
  5. 中拉出每个字符串时
  6. 如果其中 none 是合适的,那么您可以将 innerArray 保留为类型 Array^。您需要调用显式方法 Array.GetValue(int) 而不是使用 [] 索引器。与前面的选项一样,您需要在将每个字符串从内部数组中拉出时对其进行转换。

您在没有检查内部数组长度的情况下将第二个维度设置为 5;我假设你知道一些我们不知道的东西,并且确定不会有任何大于 5 的东西。如果没有,你需要迭代列表一次以获得最大数组大小,创建 2D 数组,然后复制字符串。