Sobes.tech
Junior — Middle

Элементти реттілігин сактабай туруп, операциянын туруктуу татаалдыгын ашпастан, слайстен натыйжалуу алып салуунун кандай жолу бар?

sobes.tech AI

AIден жооп

Go dilinde slice-dan elementni silmek üçün, elementlərin sırasını qorumaq və sabit vaxt mürəkkəbliyi O(1) ilə, silinəcək elementi slice-in sonuncu elementi ilə dəyişdirib, sonra slice-i bir element qısaltmaq olar.

Nümunə:

func removeUnordered(s []int, i int) []int {
    s[i] = s[len(s)-1] // i elementini son elementlə dəyişdirir
    return s[:len(s)-1] // slice-i qısaldır
}

// İstifadə:
s := []int{10, 20, 30, 40, 50}
s = removeUnordered(s, 1) // indeks 1-dəki elementi (20) silir
// İndi s, məsələn, [10, 50, 30, 40] ola bilər

Bu üsul elementlərin sırasını qorumaqdan imtina edir, amma çox sürətlidir, çünki elementlərin hərəkət etdirilməsinə ehtiyac yoxdur.