今天我們用一個簡單、生活化的題目來練習:
📒 情境:
一家筆記本工廠收到不同供應商提供的紙漿。
現在工廠想知道:
T
,表示有幾筆供應商紀錄<供應商>: <數量>
輸入:
3
Alice 1
Bob 100
Charlie 50
輸出:
1510
Alice: 10
Bob: 1000
Charlie: 500
Supplier
結構。map[string]int
→ key 是供應商名稱,value 是 notebooks 的數量。package main
import (
"fmt"
)
// 定義一個結構體儲存供應商資料
type Supplier struct {
name string
weight int
}
func main() {
var T int
fmt.Scan(&T)
// 用 slice 儲存輸入
suppliers := make([]Supplier, 0, T)
for i := 0; i < T; i++ {
var name string
var weight int
fmt.Scan(&name, &weight)
suppliers = append(suppliers, Supplier{name, weight})
}
// 用 map 統計各供應商的 notebook 數量
notebookMap := make(map[string]int)
totalNotebooks := 0
for _, s := range suppliers {
notebooks := (s.weight * 1000) / 100
notebookMap[s.name] += notebooks
totalNotebooks += notebooks
}
// 輸出總數
fmt.Println(totalNotebooks)
// 為避免重複輸出同一供應商,把結果獨立處理
alreadyPrinted := make(map[string]bool)
for _, s := range suppliers {
if !alreadyPrinted[s.name] {
fmt.Printf("%s: %d\n", s.name, notebookMap[s.name])
alreadyPrinted[s.name] = true
}
}
}
suppliers := make([]Supplier, 0, T)
notebookMap := make(map[string]int)
map
,key 是供應商名稱 (string),value 是 notebooks 的數量 (int)。notebookMap[s.name] += notebooks
alreadyPrinted
map
📘 小練習:
map
的 key 抽出來放進 slice,然後用 sort.Strings
排序再輸出)✅ 就這樣,你學會了如何用 Go 的 slice + map 來完成一個小專案題目!