// 第 11 周 – 用内置的 map（哈希表）统计频率
// 运行：go run ./w11/wordcount
package main

import (
	"fmt"
	"maps"
	"slices"
	"strings"
)

func main() {
	text := "the quick brown fox jumps over the lazy dog the fox runs and the dog sleeps"
	freq := map[string]int{}
	for _, w := range strings.Fields(text) {
		freq[w]++ // 不存在的键的值为 0（零值）
	}
	fmt.Println("frequencies:", freq) // fmt 按排序后的顺序打印 map 的键

	// 前 3 名：按频率对键排序
	keys := slices.Collect(maps.Keys(freq))
	slices.SortFunc(keys, func(a, b string) int {
		if freq[a] != freq[b] {
			return freq[b] - freq[a]
		}
		return strings.Compare(a, b)
	})
	fmt.Print("top 3: ")
	for _, k := range keys[:3] {
		fmt.Printf("%s=%d ", k, freq[k])
	}
	fmt.Println()

	v, ok := freq["cat"] // “comma ok”写法：区分不存在的键和值为 0 的键
	fmt.Println(`freq["cat"] =`, v, ", present?", ok)
	delete(freq, "the")
	fmt.Println(`after delete len =`, len(freq))
}
