Pipeline Report
Pipeline hisoboti
Pipeline'ning oxirgi bosqichi — natijani odam o'qiy oladigan hisobotga aylantirish. map[string]CategoryStatsning o'zi ishlash uchun qulay, lekin uni to'g'ridan-to'g'ri chop etish yaxshi ko'rinmaydi, va — Count Everything darsida ko'rganingizdek — map ustidan `range` qilish tartibi tasodifiy. Bir xil hisobot ikki marta ishga tushirilsa, kategoriyalar har safar boshqa tartibda chiqishi mumkin.
Hisobot uchun tasodifiy tartib yaramaydi — u har doim bir xil, bashorat qilinadigan ko'rinishda bo'lishi kerak. Yechim: kalitlarni alohida slicega yig'ib, ularni saralang (sort), so'ng saralangan tartibda yuring.
import "sort"
keys := make([]string, 0, len(stats))
for k := range stats {
keys = append(keys, k)
}
sort.Strings(keys)sort.Strings berilgan []stringni o'sish tartibida, joyida (in place) saralaydi. Endi keys ustidan range qilsangiz, tartib har doim alifbo bo'yicha, har safar bir xil bo'ladi.
Har bir qatorni yasash uchun Format Like a Pro darsidagi fmt.Sprintfdan foydalanasiz, so'ng barcha qatorlarni birlashtirish uchun Slug Generator loyihasidagi strings.Joinni qayta ishlatasiz:
lines := make([]string, 0, len(keys))
for _, k := range keys {
s := stats[k]
lines = append(lines, fmt.Sprintf("%s: %d items, $%.2f total, $%.2f avg", k, s.Count, s.Total, s.Avg))
}
return strings.Join(lines, "\n")>_ Exercise
Statistikani, kategoriyalar alifbo tartibida saralangan holda, odam o'qiy oladigan hisobotga aylantiradigan FormatReport(stats map[string]CategoryStats) string funksiyasini yozing.
Har bir qator formati: "<kategoriya>: <son> items, $<jami> total, $<o'rtacha> avg", jami va o'rtacha 2 kasr xona bilan. Qatorlarni yangi qator (\n) bilan birlashtiring.
Misol:
- •
{"furniture": {Count: 1, Total: 249.99, Avg: 249.99}, "electronics": {Count: 2, Total: 1019.98, Avg: 509.99}}uchun natija (alifbo tartibida): - •
"electronics: 2 items, $1019.98 total, $509.99 avg\nfurniture: 1 items, $249.99 total, $249.99 avg"
Stuck? Reveal a hint to help you.
Key Takeaway
Key Takeaway:
Map ustidan range qilish tartibi kafolatlanmagan, shuning uchun bashorat qilinadigan chiqish kerak bo'lganda kalitlarni yig'ib, sort.Strings bilan saralang. Kichik funksiyalarni (ParseYAML, TransformRows, GroupByCategory, ComputeStats, FormatReport) birlashtirib, siz xom YAML matnidan toza, o'qish oson hisobotgacha bo'lgan to'liq ma'lumot Pipeline'ini qurdingiz.
$ go run main.go
Kodingizni ishga tushiring