/ / Como converter lista de matrizes em matriz bidimensional? - visual-c ++, coleções, c ++ - cli

Como converter lista de matrizes para matriz bidimensional? - visual-c ++, coleções, c ++ - cli

Eu tenho uma lista de matrizes onde adicionei muitas matrizes, mas todas elas são do mesmo tamanho. Agora eu quero converter esta lista em matriz bidimensional. Eu tentei desta maneira:

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();

Mas eu tenho esse erro:

a value of type "cli::array<System::Array ^, 1> ^" cannot be assigned to an entity of type "cli::array<System::String ^, 2> ^"

Não sei como convertê-lo.

Respostas:

1 para resposta № 1

Você precisará iterar e copiar todas as seqüências individualmente. No entanto, o tipo bruto Array^ não é tão conveniente trabalhar com isso, então você precisará fazer algo sobre isso.

Basicamente, o que você precisa fazer é o seguinte:

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

Dependendo de como está o restante do programa e de quais objetos estão realmente na Lista, existem algumas opções sobre o que fazer. Aqui estão as opções que vejo, em ordem de preferência.

  1. Em vez de um List<Array^>^, ter vList ser um List<array<String^>^>^. Se a lista realmente for uma lista de matrizes de cadeias, essa opção provavelmente será a mais correta. Nesse caso, arrayOfSomeSort^ seria array<String^>^.
  2. E se vList não pode alterar o tipo, mas de fato contém matrizes de string, então eu teria a variável local innerArray seja do tipo array<String^>^e faça um elenco ao retirá-lo vList.
  3. Se as matrizes na lista não são matrizes de seqüência de caracteres, mas são matrizes de objetos que contêm cadeias de caracteres, então eu teria array<Object^>^ innerArraye, em vez disso, lance para isso e faça um lance para String^ conforme você puxa cada corda innerArray.
  4. Se nada disso for apropriado, você poderá sair innerArray como tipo Array^. Você precisará chamar o método explícito Array.GetValue(int) em vez de usar o [] indexador. Como na opção anterior, você precisará converter cada string à medida que a puxa para fora da matriz interna.

Você definiu a segunda dimensão para 5 semverificar os comprimentos das matrizes internas; Suponho que você saiba algo que não sabemos e tenha certeza de que não haverá nada maior que 5. Caso contrário, você precisará iterar a lista uma vez para obter o tamanho máximo da matriz, crie a matriz 2D, e copie as seqüências de caracteres.