Aggregator: Grouping
Agregator: guruhlash
Endi sizda toza, ishlatishga tayyor Product qiymatlaringiz bor. Pipeline'ning keyingi bosqichi — ularni tahlil qilishga tayyorlash uchun guruhlash. Masalan: "har bir kategoriyada nechta mahsulot bor?" degan savolga javob berish uchun, avval mahsulotlarni kategoriyasi bo'yicha guruhlashingiz kerak.
Bu — Count Everything darsidagi counts[key]++ andazasining kengaytmasi. U yerda har bir kalit uchun sonni oshirgan edingiz; bu yerda esa har bir kalit uchun sliceni kengaytirasiz:
groups := make(map[string][]Product)
for _, p := range products {
groups[p.Category] = append(groups[p.Category], p)
}groups[p.Category] yo'q kalit uchun nol qiymatni — bo'sh []Product (nil slice)ni qaytaradi, va append(nil, p) bilan []Product{p} xosil bo'ladi. Xuddi counts[key]++ nolga 1 qo'shgani kabi, bu yerda ham mavjud bo'lmagan kalitni maxsus holat sifatida tekshirishning hojati yo'q — Go buni siz uchun to'g'ri hal qiladi.
Natija — map[string][]Product: har bir kategoriya nomi o'sha kategoriyadagi barcha mahsulotlar slicasiga ishora qiladi.
>_ Exercise
Mahsulotlarni Category maydoni bo'yicha guruhlaydigan GroupByCategory(products []Product) map[string][]Product funksiyasini yozing.
Misol:
- •2 ta
"electronics"va 1 ta"furniture"mahsulotli slice uchun,GroupByCategorylen(groups["electronics"]) == 2valen(groups["furniture"]) == 1bo'lgan map qaytaradi
Stuck? Reveal a hint to help you.
Key Takeaway
Key Takeaway:
map[string][]T bilan guruhlash counts[key]++ning tabiiy davomi: groups[key] = append(groups[key], item). Yo'q kalit uchun appendning nol qiymati (nil slice) to'g'ri ishlaydi, maxsus tekshiruv shart emas.
NEXT UP
Aggregator: Math
$ go run main.go
Kodingizni ishga tushiring