2016-08-12 12 views
-1

ギザギザの配列をArray.AddRangeで拡張しようとしましたが、成功しませんでした。 なぜ動作しないのかわかりませんが、例外はありませんが、配列の範囲は変更されません。 (ギザギザの配列を伸ばす方法

public World(ushort[][][] worldMatrice) 
{ 
    // OldWith = 864 
    ushort OldWidth = (ushort)worldMatrice.GetLength(0); 

    // Extend the matrice to (1024) => only the first level [1024][][]    
    worldMatrice.ToList().Add(new ushort[1024- OldWidth][]); 
    // NewWidth = 864 , and should be 1024 ... 
    ushort NewWidth = worldMatrice.getLenght(0); 
} 
+0

'Array.AddRange'、それはJavaScriptですか? .NETでは、配列はサイズ変更できません。新しい配列を割り当てて要素にコピーできますが、既存の配列のサイズを変更することはできません。いずれにせよ、あなたは「働かない」とは何を意味しているのかを教えておらず、使用しようとする場所のコードとあなたが得た結果を示していません。 –

+0

ギザギザの配列は単なる配列の1次元配列です。他の1次元配列と同じようにサイズを変更します。ガイダンスについては、重複したマークを参照してください –

答えて

1

https://msdn.microsoft.com/en-us/library/bb397694.aspx

Array.AddRangeで何もしなかった: ここで私が使用したコードです)は配列の次元を変更しません.Array.Lengthは、配列が保持できる要素の最大数を返します。非null要素の総数は返しませんその中にnts。

アレイのサイズを変更する場合は、古いアレイの値を必要な次元の新しいアレイに転送する必要があります。

int[] newArray = new int[1024]; 
Array.Copy(oldArray, newArray, oldArray.Length); 

あなたの出力を保存していない

int count = array.Count(s => s != null); 
+0

_ "Array.AddRange()は配列の次元を変更しません" _はい、そうです。 C#ではなくJavaScriptです。また、配列のサイズを変更したい人は、ロジックを明示的にコーディングするのではなく、 'Array.Resize()'を使用するように指示する必要があります。 –

+0

ありがとう、それは素晴らしい仕事です –

0

この

worldMatrice.ToList() 

があなたの配列のコピーを作成し、その後、あなたはその

+0

私は=> worldMatrice = worldMatrice.toList()を追加する必要があります。(.....? –

1

のようなものを使用して、配列内のnullでない要素の数を取得します。 これを試してください:

worldMatrice = worldMatrice.ToList().Add(new ushort[1024- OldWidth][]).ToArray(); 
関連する問題