Top / .NET備忘録 / 09.配列 / 02.VBArrayBase / 04.リサイズ

VB6.0 の Redim Preserve に似た機能を実装します。

配列のリサイズは、最後の次元のみ行うことができ、下限の変更はできません。
思い切って、リサイズ後の長さのみ指定することにします。

 public void Resize(int newSize)
 {
     VBArrayBound[] newBounds = CopyBounds(m_Bounds);
     newBounds[m_Bounds.Length - 1].Length = newSize;
 
     Array newArray = CreateArray(newBounds);
 
     RecursiveCopyArray(m_Array, newArray);
 
     m_Bounds = newBounds;
     m_Array = newArray;
 }
 
 private void RecursiveCopyArray(Array source, Array dest)
 {
     int[] indexes = new int[Rank];
     RecursiveCopyArray(0, indexes, source, dest);
 }
 
 private void RecursiveCopyArray(int demension, int[] indexes, Array source, Array dest)
 {
     if (demension >= indexes.Length)
     {
         dest.SetValue(source.GetValue(indexes), indexes);
     }
     else
     {
         int lowBound = source.GetLowerBound(demension);
         int upperBound = source.GetUpperBound(demension);
         int upperBound2 = dest.GetUpperBound(demension);
         if (upperBound > upperBound2) upperBound = upperBound2;
         for (int i = lowBound; i <= upperBound; i++)
         {
             indexes[demension] = i;
             RecursiveCopyArray(demension + 1, indexes, source, dest);
         }
     }
 }



トップ   編集 凍結 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 単語検索 最終更新   最終更新のRSS
Last-modified: 2013-09-02 (月) 02:14:44 (1444d)