Advertisement
PavelZhdanov

Untitled

Feb 9th, 2019
147
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Go 2.18 KB | None | 0 0
  1. package main
  2.  
  3. import (
  4.     "fmt"
  5.     "sort"
  6. )
  7.  
  8. var m = make(map[string]int)
  9.  
  10. func main() {
  11.     //Создание отображение при помощи make
  12.     ages := make(map[string]int)
  13.     ages["alice"] = 31
  14.     ages["paul"] = 43
  15.     ages["peter"] = 13
  16.  
  17.     //Создание отображения литеральным способом
  18.     newages := map[string]int{
  19.         "alice": 31,
  20.         "paul":  43,
  21.         "peter": 13,
  22.         "bob":   25}
  23.  
  24.     //Тестовые срезы для проверки функции Add
  25.     testList := []int{1, 2, 3, 4, 5, 6}
  26.     testList2 := []int{7, 8, 9, 10}
  27.  
  28.     //Функция Add подсчитывает сколько раз срез был добавлен в множество
  29.     add(testList)
  30.     add(testList2)
  31.     add(testList2)
  32.     add(testList2)
  33.  
  34.     fmt.Printf("Count(testList) = %d\n", count(testList))
  35.     fmt.Printf("Count(testList2) = %d\n", count(testList2))
  36.     fmt.Printf("%q\n", m)
  37.  
  38.     delete(newages, "bob") //Удаление элемента из отображения
  39.  
  40.     //Проверка на существование элемента с ключем bob в отображении ages
  41.     age, ok := ages["bob"]
  42.     if !ok {
  43.         fmt.Println("Key 'bob' not exits in ages!")
  44.     } else {
  45.         fmt.Printf("Age of Bob = %d", age)
  46.     }
  47.  
  48.     //Извлечение ключей из отображения для последующей сортировки
  49.     var names []string
  50.     for name := range ages {
  51.         fmt.Printf("name=%s\n", name)
  52.         names = append(names, name)
  53.     }
  54.     sort.Strings(names) //Сортировка среза строк
  55.     fmt.Printf("names=%s\n", names)
  56.  
  57.     fmt.Printf("ages == newages is %t\n", equal(ages, newages))
  58. }
  59.  
  60. //Преобразование целочисленного среза в строку для работы как ключ отображения
  61. func k(list []int) string  { return fmt.Sprintf("%q", list) }
  62. func add(list []int)       { m[k(list)]++ }
  63. func count(list []int) int { return m[k(list)] }
  64.  
  65. //Сравнение двух отображений
  66. func equal(x, y map[string]int) bool {
  67.     if len(x) != len(y) {
  68.         return false
  69.     }
  70.  
  71.     for k, xv := range x {
  72.         if yv, ok := y[k]; !ok || yv != xv {
  73.             return false
  74.         }
  75.     }
  76.     return true
  77. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement