Advertisement
Guest User

Untitled

a guest
Nov 28th, 2016
18
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. package main
  2.  
  3. import (
  4.     "fmt"
  5. )
  6.  
  7. // Тип элемента массива исходных данных
  8. type Element struct {
  9.     Date   string
  10.     Amount int
  11. }
  12.  
  13. func main() {
  14.     // Массив исходных данных
  15.     input := []Element{
  16.         {"2016.11.21", 20},
  17.         {"2016.11.22", 23},
  18.         {"2016.11.25", 3},
  19.         {"2016.11.21", 98},
  20.         {"2016.11.22", 4},
  21.         {"2016.11.21", 9},
  22.         {"2016.11.25", 30},
  23.     }
  24.  
  25.     // В этой мапе будем считать суммы и избавляться от дубликатов
  26.     // Используем дату как ключ, а сумму как значение
  27.     aggregationMap := make(map[string]int)
  28.  
  29.     for _, elem := range input {
  30.         // Достаем из мапы имеющееся значение для данной даты
  31.         // и флаг "ok", который будет false, если
  32.         previousValue, ok := aggregationMap[elem.Date]
  33.         if ok {
  34.             // Если такая дата уже есть в мапе, добавляем к значению очередное число
  35.             aggregationMap[elem.Date] = previousValue + elem.Amount
  36.         } else {
  37.             // Если такой даты еще нет в мапе, то создаем ее там и помещаем наше число
  38.             aggregationMap[elem.Date] = elem.Amount
  39.         }
  40.     }
  41.  
  42.     // Выводим на экран все, что содержится в нашей мапе
  43.     for date, sum := range aggregationMap {
  44.         fmt.Println(date, sum)
  45.     }
  46. }
Advertisement
Advertisement
Advertisement
RAW Paste Data Copied
Advertisement