Remove Like a Pro
Professional darajada o'chirish
// 2-indeksdagi jadvalni olib tashlash
tables := []string{"users", "orders", "sessions", "products"}
tables = append(tables[:2], tables[3:]...) // ["users", "orders", "products"]Slicedan element o'chirishning klassik usuli — indeks atrofidagi bo'laklarni append bilan qayta ulash: indeksdan oldingi qism keyingi qismga qo'shiladi, ... esa ikkinchi slicani alohida argumentlarga yoyadi.
Avval indeksni tekshiring. To'g'ri diapazon 0 dan len(s)-1 gacha, shuning uchun 0-indeks yaxshi, lekin len(s)ning o'zi oxiridan bir qadam nariда va rad etilishi kerak.
Zamonaviy usul: slices.Delete
Go 1.21+ da, slices.Delete xuddi shu ulashni siz uchun bajaradi:
import "slices"
tables := []string{"users", "orders", "sessions", "products"}
tables = slices.Delete(tables, 2, 3) // ["users", "orders", "products"]slices.Delete(s, i, j) i indeksidan jgacha (lekin uni o'z ichiga olmagan holda) hammasini o'chiradi. Bitta elementni o'chirish uchun, diapazonni j = i+1 berib bir birlik kengaytiring. Shuning uchun yuqorida 2-indeksni o'chirish 2, 3 dan foydalanadi.
Qaytadan belgilashga e'tibor bering. slices.Delete yangi slice qaytarish o'rniga asl massivni qayta ishlatadi, shuning uchun natijasini har doim o'zgaruvchingizga qaytadan belgilang.
>_ Exercise
Sizda ma'lumotlar bazasi jadval nomlari slice'i bor. RemoveAt funksiyasini yozing:
RemoveAt(tables []string, index int) ([]string, error)- •1. Agar
indexchegaradan tashqarida bo'lsa (0 dan kichik yokilen(tables)ga teng/undan katta),nilva xato qaytaring:errors.New("index out of bounds"). - •2. Aks holda, o'sha indeksdagi jadvalni olib tashlang va yangi slicani
nilxato bilan qaytaring.
Misol: RemoveAt([]string{"users", "orders", "sessions"}, 1) ["users", "sessions"], nil qaytaradi
Stuck? Reveal a hint to help you.
Key Takeaway
Key Takeaway:
Zamonaviy kodda slices.Delete dan foydalaning, lekin qo'lda append(s[:i], s[i+1:]...) ulashini ham biling, chunki u eski kod bazalarida hamma joyda uchraydi. Har doim avval indeksni tekshiring.
NEXT UP
Filter Like a Pro
$ go run main.go
Kodingizni ishga tushiring