首页 > 解决方案 > 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 之类的方法(某种程度上通用到足以成为库代码?)

如果我的地图文字非常不正确,我们深表歉意。我对这门语言还是很陌生。

标签: gohashmapgrouping

解决方案


嗯,事实证明这并不难:

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
}

推荐阅读