我正在解析一个警察记录csv文件。文件中有多个同一日期的匹配项。我有日期映射,它使用分配给它的DateData类型创建新的日期键。现在的 DateDate 只有一个键。每次循环中再次出现同一日期时,该键都会递增。现在我只能增加一次。计数从1到2,即使有几十个相同的日期。Count这是出于清晰起见,我通过csv文件的较短版本获得的输出。user@MacBook-Pro-3 criminal-record-parser % go run main.goDoes not exist yet{1}{2}{2}{2}{2}计数应该增加到总共5,但它只增加一次 这是我在主包中的所有代码:package mainimport ( "encoding/csv" "fmt" "io" "log" "os" "strings")type Report struct { Date string `json:"date"` Address string `json:"address"` District string `json:"district"` Beat string `json:"beat"` Grid string `json:"grid"` Crimedesc string `json:"crimedesc"` UCRCode string `json:"ucr_ncic_code"` Lat string `json:"latitude"` Lon string `json:"longitude"`}type DateData struct { Count int}func main() { reports := CreateReport() var dates = make(map[string]DateData) for _, report := range reports { dateIndex := strings.LastIndex(report.Date, "/") date := report.Date[0 : dateIndex+3] val, ok := dates[date] if !ok { fmt.Println("Does not exist yet") dates[date] = DateData{ Count: 1, } } val.Count += 1 fmt.Println(val) } fmt.Println("dates slice", dates)}func CreateReport() []Report { csvFile, err := os.Open("./files/sacramento-test.csv") if err != nil { log.Fatal("error opeining file", err) } defer csvFile.Close() reader := csv.NewReader(csvFile) var reports []Report for { line, err := reader.Read() if err == io.EOF { break } else if err != nil { log.Fatal("error reading file", err) }
1 回答
ABOUTYOU
TA贡献1812条经验 获得超5个赞
您没有使用更新的计数更新您的计数。加:map
val.Count += 1fmt.Println(val) dates[date] = val // <--- add this
https://play.golang.org/p/jwDgDGDnXAw
输出:
Does not exist yet {1} {2} {3} {4} {5} dates slice map[1/1/06:{5}]
- 1 回答
- 0 关注
- 105 浏览
添加回答
举报
0/150
提交
取消