go - Golang 的 Guava Multimaps.index 等价物?
问题描述
我比较陌生,我正在寻找番石榴多图索引方法的粗略等价物(库或实现)。它的工作原理如下
它应该执行以下操作:
给定一个结构切片,构造一个从公共值到共享该值的条目数组的映射。例如:
Repetition struct {
ID int
Days int
Category string
}
reps := []Repetition{
Repetition{ID: 1, Day: 0, Category: "strength"},
Repetition{ID: 2, Day: 0, Category: "aerobic"}
Repetition{ID: 3, Day: 1, Category: "strength"}
Repetition{ID: 4, Day: 1, Category: "aerobic"}
}
result = indexByDay(reps)
结果是:
map[int][]Repetition{
0: []Repetition{Repetition{ID: 1, Day: 0, Category: "strength"}, Repetition{ID: 2, Day: 0, Category: "aerobic"}},
1: []Repetition{Repetition{ID: 3, Day: 1, Category: "strength"}, Repetition{ID: 4, Day: 1, Category: "aerobic"}}
}
问题是是否有任何内置或现有库具有诸如 indexByDay 之类的方法(某种程度上通用到足以成为库代码?)
如果我的地图文字非常不正确,我们深表歉意。我对这门语言还是很陌生。
解决方案
嗯,事实证明这并不难:
func group(reps []lifting.Repetition) map[int][]Repetition {
m := make(map[civil.Date][]lifting.Repetition)
for _, rep := range reps {
value, present := m[rep.Day]
if !present {
m[rep.Day] = []lifting.Repetition{rep}
} else {
m[rep.Day] = append(value, rep)
}
}
return m
}
推荐阅读
- c - C:在将具有数组的指针传递给函数时,会出现运行时错误。为什么?
- java - 将 Jetty 从 9.3 更新到 9.4 后,Javamail 出现非常奇怪的问题
- ffmpeg - 如何将具有 DRM 许可证的 mpeg dash (MPD) 转换为 MP4?
- php - Nginx 和 php-fpm 仅适用于某些 php 页面。怎么了?
- javascript - Javascript中的类字段和属性有什么区别
- scala - 为什么 Some(null) 在 Spark 2.4 中抛出 NullPointerException(但在 2.2 中有效)?
- node.js - Angular Universal TTFb 需要很长时间才能响应
- python - 将字典中的一些值相乘
- python - TypeError("'_io.TextIOWrapper' 对象不可调用")
- javascript - Firebase 在登录后注销用户