如何使用Golang计算地图中某个值出现的次数?

时间:2019-03-05 00:11:06

标签: dictionary go sum

我创建了具有以下结构的地图:

m := make(map[int]Record)

记录是如下结构:

type Record struct {
    UID  int
    Type string
    Year string
}

SumRecord结构应该存储有关映射m中每个给定类型/年份值的出现次数的信息。

type SumRecord struct {
    Sum  int
    Type string
    Year string
}

该结构应该保存有关图书出版年份的信息,即{1, "Type": "fiction", "Year": 1996}, {2, "Type": "non-fiction", "Year": 1996}

我未尝试创建第二张地图,每年我将在其中存储每种出版物类型的总和(类似于SQL中的SUM / GROUP BY)。如何使用Go来实现?

1 个答案:

答案 0 :(得分:1)

这是@ThunderCat提供的解决方案的替代解决方案。

这将创建一个新的SumRecord到整数的映射,该映射表示该特定类型/年份分组的出现总数。

查看完整示例here

type Record struct {
    UID  int
    Type string
    Year string
}

type SumRecord struct {
    Type string
    Year string
}

m := make(map[int]Record)

// e.g. [{"1996","non-fiction"}:4], representing 4 occurrences of {"1996","non-fiction"}
srMap := make(map[SumRecord]int)

// add records

// loop over records
for key := range m {
    sr := SumRecord{
        Type: m[key].Type,
        Year: m[key].Year,
    }
    // creates new counter or increments existing pair counter by 1
    srMap[sr] += 1
}
// print all mappings
fmt.Println(srMap)

// specific example
fmt.Println(srMap[SumRecord{
    Year: "1996",
    Type: "non-fiction",
}])