2016-08-20 24 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 ^> ^で成功のピットに落ちるので、要素タイプを徹底的に調べることができ、配列要素を持つことの不幸に対処する必要はありません文字列ではありません。また、2次元配列(配列<配列 ^> ^)ではなく、ギザギザの配列で、ToArray()が機能するようになっています。すごく速い。 –

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

、そしてどのようなオブジェクトが一覧で実際に、何をすべきかについて、いくつかのオプションがあります。私が見ている選択肢は、優先順位の順です。

  1. 代わりのList<Array^>^vListList<array<String^>^>^ことがあります。リストが本当に文字列配列のリストである場合、このオプションはおそらく最も正しいでしょう。この場合、arrayOfSomeSort^array<String^>^となります。
  2. vListは型を変更できないが、実際には文字列配列を含んでいる場合は、ローカル変数innerArrayarray<String^>^であり、キャストはvListから引き出します。
  3. リスト内の配列が文字列配列ではなく、文字列を含むオブジェクト配列の場合は、array<Object^>^ innerArrayがあり、その代わりにキャストされ、各文字列を引くときにString^にキャストしますinnerArrayのうち。
  4. これらのどれも該当しない場合は、innerArrayをタイプArray^のままにできます。 []インデクサーを使用する代わりに、明示的なメソッドArray.GetValue(int)を呼び出す必要があります。前のオプションと同様に、各文字列を内側の配列から引き出してキャストする必要があります。

内側の配列の長さをチェックせずに2番目の次元を5に設定しました。私はあなたが何かを知っていると仮定していると仮定して、5より大きい何も存在しないと確信しています。もしそうでなければ、リストを一度反復して最大配列サイズを取得し、文字列をコピーします。

+0

はい、2番目のディメンションは5であり、ハードコードされています。私は同じ(= 5)次元の配列のリストを持っています。残念なことに、System :: String^"という型のエンティティにSystem :: Object ^"という型の値を割り当てることができないというエラーが発生しました。 '' AnArray [outer、inner] =(String ^)innerArray [ inner '; ''しかし、' default ':' System :: Array 'のメンバーではありません。エラーが表示されます。 –

+0

Bah、コンパイラでチェックせずに答えを入力するだけですリストの 'Array ^'が実際に '配列 ^'である場合、最良の解決策は 'List ^'を 'List <配列 ^> ^'に切り替えることです。それが不可能な場合は、 'innerArray'を' array ^'にキャストしてリストから抜き出します。それらが '配列 ^'の場合は、その代わりにキャストし、試してみたように個々の要素を 'String ^'にキャストしてください。どちらも動作しない場合は、 'Array ^'でGetValue(int)メソッドを呼び出し、その結果を 'String ^'にキャスト/変換することができます。 –

+0

それは動作します!ありがとうございました。 –

関連する問題