GoDasturchi
Remove Like a Pro

Remove Like a Pro

Professional darajada o'chirish

example.go
// 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:

example.go
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:

example.go
RemoveAt(tables []string, index int) ([]string, error)
  • 1. Agar index chegaradan tashqarida bo'lsa (0 dan kichik yoki len(tables)ga teng/undan katta), nil va xato qaytaring: errors.New("index out of bounds").
  • 2. Aks holda, o'sha indeksdagi jadvalni olib tashlang va yangi slicani nil xato bilan qaytaring.

Misol: RemoveAt([]string{"users", "orders", "sessions"}, 1) ["users", "sessions"], nil qaytaradi

Stuck? Reveal a hint to help you.

Hints (0/3)

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

OUTPUT

$ go run main.go
Kodingizni ishga tushiring

Remove Like a Pro

Professional darajada o'chirish

example.go
// 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:

example.go
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:

example.go
RemoveAt(tables []string, index int) ([]string, error)
  • 1. Agar index chegaradan tashqarida bo'lsa (0 dan kichik yoki len(tables)ga teng/undan katta), nil va xato qaytaring: errors.New("index out of bounds").
  • 2. Aks holda, o'sha indeksdagi jadvalni olib tashlang va yangi slicani nil xato bilan qaytaring.

Misol: RemoveAt([]string{"users", "orders", "sessions"}, 1) ["users", "sessions"], nil qaytaradi

Stuck? Reveal a hint to help you.

Hints (0/3)

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