Bunu yapmanın en hızlı yolu, hiç yapmamaktır.
Kulağa garip geliyor biliyorum, işte bazı sözde kod:
int array [][];
bool array_is_empty;
void ClearArray ()
{
array_is_empty = true;
}
int ReadValue (int x, int y)
{
return array_is_empty ? 0 : array [x][y];
}
void SetValue (int x, int y, int value)
{
if (array_is_empty)
{
memset (array, 0, number of byte the array uses);
array_is_empty = false;
}
array [x][y] = value;
}
Aslında, diziyi temizlemeye devam ediyor, ancak yalnızca diziye bir şey yazılırken. Bu, burada büyük bir avantaj değil. Bununla birlikte, 2B dizi, örneğin bir dörtlü ağaç (dinamik tek zihin değil) veya veri satırları koleksiyonu kullanılarak uygulanmışsa, boole bayrağının etkisini yerelleştirebilirsiniz, ancak daha fazla bayrağa ihtiyacınız olacaktır. Dörtlü ağaçta sadece kök düğüm için boş bayrağı ayarlayın, satır dizisinde her satır için bayrak ayarlayın.
Bu da "neden büyük bir 2d dizisini tekrar tekrar sıfırlamak istiyorsunuz" sorusuna yol açar? Dizi ne için kullanılıyor? Dizinin sıfırlamaya ihtiyaç duymaması için kodu değiştirmenin bir yolu var mı?
Örneğin, şunlara sahipseniz:
clear array
for each set of data
for each element in data set
array += element
yani, onu bir biriktirme tamponu için kullanın, sonra bunu bu şekilde değiştirmek performansı sonsuza kadar iyileştirecektir:
for set 0 and set 1
for each element in each set
array = element1 + element2
for remaining data sets
for each element in data set
array += element
Bu, dizinin temizlenmesini gerektirmez, ancak yine de çalışır. Ve bu, diziyi temizlemekten çok daha hızlı olacaktır. Dediğim gibi, en hızlı yol ilk etapta yapmamaktır.