Код загружает записи из JSON и обрабатывает их. В JSON бывают повторы, а в
обработку должны попадать только уникальные записи. Сейчас вызов
processRecords(uniqueRecords) даже не компилируется: дедупликации нет.
Доработай код в starter.go.
type Record struct {
ID string `json:"id"`
Amount int `json:"amount"`
}
func uniqueRecords(records []Record) []Record
Требования
- Дубликат — запись с уже встречавшимся
ID. Остаётся первая
встреченная, порядок записей сохраняется.
- Входной срез не меняется.
run загружает файл, убирает дубли и отдаёт результат в processRecords.
- O(n) по времени.
Пример
uniqueRecords([]Record{{"a", 1}, {"b", 2}, {"a", 1}, {"c", 3}, {"b", 2}})
// [{a 1} {b 2} {c 3}]
Если у двух записей одинаковый ID, но разный Amount, — это не повтор, а
конфликт данных, и молча выбирать одну нельзя.
var ErrConflict = errors.New("conflicting duplicate")
func uniqueStrict(records []Record) ([]Record, error)
- Полные повторы схлопываются, как в
uniqueRecords.
- Одинаковый
ID с другим Amount → nil и ошибка, для которой
errors.Is(err, ErrConflict). В тексте ошибки есть этот ID.
Устно: а если «уникальность» — это полное совпадение записи? Можно ли
использовать структуру как ключ map?
Разбор и эталонное решение — после своей попытки: на собеседовании подсказок не будет.
Сначала попробуй сам — подсказки не дают готовый ответ.