2016-08-20 2 views
0

많은 배열을 추가했지만 모두 동일한 크기의 배열 목록이 있습니다. 이제이 목록을 2 차원 배열로 변환하고 싶습니다. 나는이 방법으로 시도 :변환 방법 배열 목록을 2 차원 배열로 변환 하시겠습니까?

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

내가 변환하는 방법을 모르겠어요.

+0

'List ^>'를 사용하여 올바른 유형을 선택하고 요소 유형을 결정하고 배열 요소가 있다는 불행을 처리 할 필요가 없습니다. 끈이 아니야. 그리고 ToArray()가 작동 할 수 있도록 2 차원 배열 (배열 <배열 ^> ^) 대신 가변 배열이 있습니다. 훨씬 빨라졌습니다. –

+0

불행히도 그것은 작동하지 않습니다. 'cli :: array ^tablica2D;'는 작동하지만 원하는 것은 아니며 주어진 인덱스를 가진 항목을 가져올 수 없습니다. –

답변

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

  1. vListList<array<String^>^>^ 수 있습니다. List가 정말로 문자열 배열의 목록이면이 옵션이 가장 적합 할 것입니다. 이 경우 arrayOfSomeSort^array<String^>^입니다.
  2. vList 형식을 변경할 수 없지만 실제로 문자열 배열을 포함하는 경우 로컬 변수 innerArrayarray<String^>^ 일 수 있으며 캐스팅은 vList입니다.
  3. 목록에있는 배열이 문자열 배열이 아니고 대신 문자열이 포함 된 개체 배열 인 경우 array<Object^>^ innerArray이 있고 그 대신에 캐스팅되어 String^에 캐스트하면 각 문자열을 가져옵니다. out of innerArray.
  4. 해당 사항이 없으면 innerArrayArray^으로 남겨 둘 수 있습니다. [] 인덱서를 사용하는 대신 명시적인 메서드 Array.GetValue(int)을 호출해야합니다. 앞의 옵션 에서처럼, 내부 배열에서 문자열을 꺼낼 때 각 문자열을 캐스팅해야합니다.

내부 배열의 길이를 확인하지 않고 두 번째 크기를 5로 설정했습니다. 저는 여러분에게 우리가하지 못하는 것을 알고 있다고 가정하고 5보다 큰 것이 없을 것이라고 확신합니다. 그렇지 않다면 최대 배열 크기를 얻기 위해리스트를 한 번 반복 할 필요가 있습니다. 2D 배열을 만들고, 그런 다음 문자열을 복사하십시오.

+0

예, 두 번째 차원은 5이며 하드 코드되어 있습니다. 동일한 (= 5) 차원의 배열 목록이 있습니다. 불행히도'System :: String^"유형의 엔티티에 'System :: Object ^"값을 할당 할 수 없다는 오류가 발생합니다.'anArray [outer, inner] = (String ^) innerArray [ 내부 ';'하지만 '기본': '시스템 :: 배열'의 구성원이 아닙니다 오류가 나타납니다. –

+0

Bah, 그게 내가 컴파일러에서 검사하지 않고 답을 타이핑하는 것입니다.리스트의'Array ^'가 실제로'array ^'이면, 가장 좋은 해결책은'List ^'를'List ^> ^'로 바꿔주는 것입니다. 그게 가능하지 않다면, 목록에서 꺼낼 때'innerArray'를'array ^'으로 형변환 할 것입니다. 만약 그들이'array ^'이라면, 그 대신에 캐스팅하고, 시도한 것처럼 개별 요소를'String ^'으로 캐스팅하십시오. 둘 다 작동하지 않으면,'Array ^'에서 GetValue (int) 메소드를 호출하고 결과를'String ^'으로 변환/변환 할 수 있습니다. –

+0

그것은 작동합니다! 고맙습니다. –

관련 문제