Unity 3D : 陣列補洞

笑 :

先聲明 : 本程式碼由於時間緊迫,臨時做出來的,沒有做效率優化,單純只是思想上的實現,如果各位有更好的寫法,歡迎在下面留言呦 ! 感激不盡。

前言 :

假設我有一個陣列 [ 1, 2, 0, 0, 0, 6, 7 ],我想把中間的 0 補起來,可以用下面幾種方法。


方法一 ( 用下一個值補起來 ) :

void Start(){
      int[] table = { 1, 2, 0, 0, 0, 6, 7 };

      for (int i = 0; i < table.Length - 1; i++)
      {
          if (table[i] == 0)
          {
              int k = 1;
              while (table[i + k] == 0)
              {
                  k++;
              }
              int n = i + k;
              for (int v = i; v < n; v++)
              {
                  table[v] = table[n];
              }
          }
      }	
      // 打印結果
      for (int i = 0; i < table.Length; i++) print(table[i]);
}

結果 :

在這裏插入圖片描述


方法二 ( 線性插值 ) :

插的方法簡單暴力,而且有不連續問題,也許用二元插值可以改善

int[] table = { 1, 2, 0 /* i */, 0, 0, 6 /* n */, 7 };

        for (int i = 0; i < table.Length - 1; i++)
        {
            if (table[i] == 0)
            {
                int k = 1;
                while (table[i + k] == 0)
                {
                    k++;
                }
                int n = i + k;
                int size = n - i;
                for (int v = i, g = 0; v < n; v++, g++)
                {
                    int start = table[i - 1];
                    int end = table[n];
                    table[v] = (int)Mathf.Lerp(start, end, g / (float)size);                                        
                }
            }
        }
        // 打印結果
        for (int i = 0; i < table.Length; i++) print(table[i]);

在這裏插入圖片描述

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章