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 № 1Você 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.
- Em vez de um
List<Array^>^
, tervList
ser umList<array<String^>^>^
. Se a lista realmente for uma lista de matrizes de cadeias, essa opção provavelmente será a mais correta. Nesse caso,arrayOfSomeSort^
seriaarray<String^>^
. - E se
vList
não pode alterar o tipo, mas de fato contém matrizes de string, então eu teria a variável localinnerArray
seja do tipoarray<String^>^
e faça um elenco ao retirá-lovList
. - 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^>^ innerArray
e, em vez disso, lance para isso e faça um lance paraString^
conforme você puxa cada cordainnerArray
. - Se nada disso for apropriado, você poderá sair
innerArray
como tipoArray^
. Você precisará chamar o método explícitoArray.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.