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]);

在这里插入图片描述

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值