Эквивалент Guava Multimaps.index для Голанга? - PullRequest
0 голосов
/ 25 марта 2019

Я относительно новичок, и я ищу приблизительный эквивалент (библиотека или реализация) метода индекса мультикарты guava. Он работает следующим образом

Это должно сделать следующее:

Учитывая фрагмент структур, создайте карту из общего значения в массивы записей, которые разделяют это значение. Например:

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 (каким-то образом достаточно универсальным, чтобы быть кодом библиотеки?)

Извиняюсь, если мой литерал карты смешно некорректен. Я все еще плохо знаком с языком.

1 Ответ

0 голосов
/ 25 марта 2019

Эх, это оказалось не так сложно:

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
}
...