Dinamik massivdən ilk elementi effektiv şəkildə necə silmək olar?
sobes.tech Süni İntellekt
AI-dan cavab
Go-da dinamik massivlər slices ilə təmsil olunur. Bir slice-dən ilk elementi silmək adətən kaydırmalı dilimləmə ilə edilir:
slice = slice[1:]
Bu əməliyyat sabit vaxtda həyata keçirilir, çünki o elementləri kopyalamır, sadəcə göstəriciləri və dilimin uzunluğunu dəyişir.
Ancaq, əgər orijinal array-i saxlamaq və istifadə olunmayan yaddaşın yığılmasının qarşısını almaq istəyirsinizsə, dövrü tampon (ring buffer) və ya iki indekslə (baş və son) təchiz olunmuş sıra istifadə edə bilərsiniz. Bu, digər elementləri hərəkət etdirmədən ilk elementi effektiv şəkildə O(1) vaxtında silməyə imkan verir.
Dövrü tampon nümunəsi:
type RingBuffer struct {
data []int
start int
size int
}
func (r *RingBuffer) PopFront() int {
if r.size == 0 {
panic("buffer is empty")
}
val := r.data[r.start]
r.start = (r.start + 1) % len(r.data)
r.size--
return val
}
Beləliklə, ilk elementi sabit vaxtda silmək üçün, bu əməliyyatı dəstəkləyən məlumat strukturu istifadə etmək daha yaxşıdır, birbaşa slice ilə deyil.