笑 :
先聲明 : 本程式碼由於時間緊迫,臨時做出來的,沒有做效率優化,單純只是思想上的實現,如果各位有更好的寫法,歡迎在下面留言呦 ! 感激不盡。
前言 :
假設我有一個陣列 [ 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]);