Поиск по сайту:
Если при объяснении вашей программы слушатель начинает кивать головой, его пора будить. (Алан.Дж.Перлис)

12 практических примеров массивов на языке программирования GoLang Go

15.05.2019
12 практических примеров массивов на языке программирования GoLang Go

Чтобы получить хорошее представление о языке программирования Go, важно понимать массивы и срезы.

Если вы разработчик или системный администратор, который является новичком в Go, важно понимать следующие ключевые различия в том, как обрабатывается массив в Go по сравнению с другим языком:

  • Вы не можете изменить размер массива, как только он объявлен.
  • Размер массива должен быть указан при объявлении массива. Чтобы преодолеть это ограничение, вы будете использовать срезы по большей части в GoLang. Но все же важно понимать, как работает массив, так как срезы работают поверх массива.
  • Когда вы присваиваете массив другому массиву, по сути вы копируете все элементы из одного в другой.
  • Вышесказанное важно понимать, так как при передаче массива в качестве параметра функции функция действительно получит копию массива и будет работать с ней. Это не указатель, который мы передаем. Это копия всего массива.

Эта статья объясняет следующие основы обработки массивов в Go, с полным рабочим примером вместе с выводом, который представлен в конце этой статьи.

  1. Объявить переменную массива с определенным размером
  2. Присвоить значение определенному элементу в массиве
  3. Доступ к определенному элементу в массиве
  4. Показать все или определенные элементы из массива
  5. Инициализировать и присвоить значения массиву одновременно
  6. Инициализируйте массив, используя многострочный синтаксис
  7. Определить длину массива — сколько элементов существует?
  8. Значение элемента массива по умолчанию
  9. Проход по элементам массива с использованием For и Range
  10. Переборка массива и получение только значения (Ignore Array Index)
  11. Инициализируйте элементы Int Array с последовательностью чисел
  12. Определить и инициализировать многомерные массивы
  13. Полный рабочий код GoLang со всеми примерами массивов

В следующей статье мы рассмотрим срезы в GoLang с примерами.

1. Объявите переменную массива с определенным размером

var distros [5]string

var ids [5]int

 

В приведенном выше:

  • var — ключевое слово
  • distros, ids — имя переменной
  • 5 — это длина массива. Вы должны указать длину массива при объявлении массива. Как только вы укажете размер массива, вы не сможете изменить его размер.
  • string, int — Тип массива. В этом примере distros — это строковый массив размером 5, а id — массив int с размером 5.

 

2. Присвойте значение определенному элементу в массиве

distros[0] = "Ubuntu"
distros[1] = "CentOS"
distros[2] = "RedHat"
distros[3] = "Debian"
distros[4] = "OpenBSD"

ids[0] = 1
ids[1] = 2
ids[2] = 3
ids[3] = 4
ids[4] = 5

 

Заметки:

  • Как вы видите выше, индексная ссылка, которую вы будете использовать для 1-го элемента массива, равна 0 (не 1).
  • distros[0] ссылается на 1-й элемент в массиве distros
  • ids[4] ссылается на 5-й элемент массива ids (который также является последним элементом массива ids в этом примере)

Если вы попытаетесь присвоить значение в массиве, размер которого превышает размер массива, вы получите сообщение об ошибке.

 

Например, если вы сделаете следующее, произойдет сбой, потому что наш массив distros имеет только 5 элементов, и мы пытаемся присвоить значение шестому элементу, которого нет в нашем массиве. Вы не можете добавить новый элемент в существующий массив.

distros[5] = "Solaris"

 

Сообщение об ошибке:

./array.go:11:10: invalid array index 5 (out of bounds for 5-element array)

 

3. Доступ к определенному элементу в массиве

mydistro := distros[1]

myid := ids[3]

 

Заметки:

  • Мы присваиваем значение 1-го элемента массива distros переменной mydistro
  • Присвоение 3-го элемента массива ids переменной myid
  • : = объявляет и инициализирует переменную одновременно
  • Также для: = вам не нужно указывать тип переменной mydistro или myid
  • : = know будет определять тип переменной в зависимости от значения, которое будет присвоено.
  • Таким образом, mydistro станет строковой переменной, а myid автоматически станет переменной int

 

4. Показать все или определенные элементы из массива

fmt.Println(distros)
fmt.Println(ids)

fmt.Println("distros[2] = ", distros[2])
fmt.Println("ids[2] = ", ids[2])

 

Чтобы отобразить определенный элемент массива или все элементы в массиве, используйте fmt.Println, как показано выше.

Убедитесь, что пакет «fmt» импортирован сверху, используя команду import

Когда вы выводите весь массив, в выводе он будет отображать все элементы в квадратных скобках, как показано ниже.

[1 2 3 4 5]
[Ubuntu CentOS RedHat Debian OpenBSD]

 

5. Инициализировать и присвоить значения массиву одновременно

Вместо того, чтобы сначала объявлять переменную массива, а затем отдельно инициализировать значения, вы можете объединить их вместе.

Следующее будет одновременно объявлять и инициализировать массив с заданными значениями.

os := [3]string{"Linux", "Mac", "Windows"}

fibonacci := [6]int{1, 1, 2, 3, 5, 8}

 

6. Инициализируйте массив, используя многострочный синтаксис

Для лучшего понимания и удобочитаемости вы также можете использовать многострочный синтаксис при инициализации и присвоении значений массиву, как показано ниже.

temperature := [3]float64{
     98.5,
     65.5,
     83.2,
}

 

Но имейте в виду, что в многострочном синтаксисе вы должны указывать запятую после последнего элемента. Как вы видите выше, после 83,2 запятая

Преимущество этого синтаксиса в том, что вы можете закомментировать определенное значение в массиве, не беспокоясь об удалении запятой, как показано ниже. В следующем примере мы закомментировали последнее значение в массиве. Но нам не пришлось беспокоиться об удалении запятой после Алисии.

names := [3]string{
     "AndreyEx",
     "Jason",
     "Alica",
     // "Rita",
}

 

7. Определите длину массива — сколько элементов существует?

Функция len возвращает общее количество элементов в данном массиве. Вы можете присвоить значение функции len и другой переменной.

arraySize := len(distros)

fmt.Println("Количество дистрибутивов = ", len(distros))
fmt.Println("Количество идентификаторов = ", len(ids))

 

Вывод:

Количество дистрибутивов = 5
Количество идентификаторов = 5

 

8. Значение по умолчанию элемента массива

В целочисленном массиве, если вы не присвоите значение массиву и попытаетесь его распечатать, вы увидите 0 в качестве значений для элементов, которым вы не присвоили значение. По умолчанию целочисленные массивы инициализируются со значениями 0.

В следующем примере мы определили массив empIds с 5 элементами, но присваивали значения только первым трем элементам.

empIds := [5]int{101, 102, 103}

fmt.Println("empIds = ",empIds)

 

Как видно из следующего вывода, последним двум элементам автоматически присваивается значение 0.

empIds =  [101 102 103 0 0]

 

Для строковых массивов, если вы не назначите значение, оно просто будет иметь пустое значение. Мы просто присвоили два элемента и оставили три последних элемента пустыми.

empNames := [5]string{"AndreyEx","Jason"}

fmt.Println("empNames = ",empNames)

 

Выход:

empNames =  [AndreyEx Jason   ]

 

9. Цикл элементов массива с использованием For и Range

Используя команды for и range, вы можете перебрать все элементы в данном массиве

for index, value := range distros {
  fmt.Println(index, " = ", value)
}

 

В приведенном выше:

  • range distros — range — команда go, которая возвращает номер индекса и значение элемента массива.
  • Вы можете назначить вывод команды range циклу for и пройти через все элементы
  • для i, значение — Здесь укажите две переменные для команды for. Имя переменной может быть любым. Это просто произошло для ясности, мы используем индекс и значение в качестве имени переменной здесь.

 

10. Переберите массив и получите только значения (Ignore Array Index)

Если вы просто хотите использовать элемент массива, а не индекс, то указание переменной индекса, как показано ниже, выдаст сообщение об ошибке.

В этом примере мы просто хотим просмотреть все значения в массиве ids и суммировать их. Таким образом, мы действительно не заботимся о переменной индекса здесь.

total := 0
for index, value := range ids {
  total = total + value
}
fmt.Println("всего всех идентификаторов = ", total)

 

Выше будет выбрасывать следующую ошибку:

./array.go:54:7: index declared and not used

 

В этом случае просто замените переменную индекса в цикле for символом подчеркивания _, как показано ниже.

for _, value := range ids {
  total = total + value
}

 

Символ подчеркивания _ указывает на языке Go, что вы берете значение определенной переменной (в данном случае индекс) и просто игнорируете его.

 

11. Инициализируйте элементы массива Int с помощью числовой последовательности.

В следующем примере показано, как можно назначить последовательные значения массиву init, используя цикл for.

var sequence [10]int
counter := 10
for index, _ := range sequence {
  sequence[index] = counter
  counter = counter + 5
}
fmt.Println()
fmt.Println("sequence = ",sequence)

 

Выше мы используем for и range для обхода элементов массива и присваивания значения. Так как мы заботимся только об индексе, а не о текущем значении элемента массива, мы используем символ подчеркивания _ для значения в цикле for, как показано выше.

В этом примере последовательность начинается с 10 с шагом 5. Таким образом, первое значение массива будет 10 и с последующим увеличением до 5.

 

12. Определите и инициализируйте многомерные массивы

Go не имеет понятия многомерного массива. Но вы можете создавать массивы, которые можно рассматривать и использовать как многомерный массив, как показано ниже.

count := 1
var multi [4][2]int
 for i := 0; i < 4; i++ {
     for j := 0; j < 2; j++ {
         multi[i][j] = count
         count++
     }
 }
 fmt.Println("Массив 4 x 2 : ", multi)

 

В приведенном выше примере мы создаем массив init размером 4 x 2 (4 строки и 2 столбца) и присваиваем значения отдельным элементам с шагом 1, начиная со значения 1.

 

Код Go со всеми примерами массивов

Для справки, следующий рабочий код go содержит все приведенные выше примеры в одной программе.

package main

import "fmt"

func array() {

  // Строковый массив
  fmt.Println("1. Строковый массив : ")

  var distros [5]string
  distros[0] = "Ubuntu"
  distros[1] = "CentOS"
  distros[2] = "RedHat"
  distros[3] = "Debian"
  distros[4] = "OpenBSD"

  mydistro := distros[1]
  fmt.Println("mydistro = ", mydistro)
  fmt.Println("distros[2] = ", distros[2])
  fmt.Println("distros = ", distros)
  fmt.Println("Количество дистрибутивов = ", len(distros))

  // Целочисленный массив (Numbers)
  fmt.Println()
  fmt.Println("2. Целочисленный массив : ")

  var ids [5]int
  ids[0] = 1
  ids[1] = 2
  ids[2] = 3
  ids[3] = 4
  ids[4] = 5

  myid := ids[3]
  fmt.Println("myid = ", myid)
  fmt.Println("ids[2] = ", ids[2])
  fmt.Println("ids = ", ids)
  fmt.Println("Количество идентификаторов = ", len(ids))

  // Одновременно объявить и инициализировать массив
  fmt.Println()
  fmt.Println("3. Одновременно объявить и инициализировать массив : ")

  os := [3]string{"Linux", "Mac", "Windows"}
  fmt.Println("os = ",os)
  fmt.Println("Количество ОС = ", len(os))

  fibonacci := [6]int{1, 1, 2, 3, 5, 8}
  fmt.Println("fibonacci = ",fibonacci)

  // Синтаксис инициализации многострочного массива
  fmt.Println()
  fmt.Println("4. Синтаксис инициализации многострочного массива : ")

  temperature := [3]float64{
       98.5,
       65.5,
       83.2,
  }
  fmt.Println("temperature = ", temperature)

  names := [3]string{
       "AndreyEx",
       "Jason",
       "Alica",
       // "Rita",
  }
  fmt.Println("names = ", names)

  // Значения по умолчанию в массиве
  fmt.Println()
  fmt.Println("5. Значения по умолчанию в массиве : ")

  empIds := [5]int{101, 102, 103}
  fmt.Println("empIds = ",empIds)

  empNames := [5]string{"AndreyEx","Jason"}
  fmt.Println("empNames = ",empNames)

  // Цикл через массив, использующий For и Range
  fmt.Println()
  fmt.Println("6. Цикл через массив, использующий For и Range : ")

  for index, value := range distros {
    fmt.Println(index, " = ", value)
  }

  // Цикл через массив, использующий For и Range (Игнорировать Индекс)
  fmt.Println()
  fmt.Println("7. Цикл через массив, использующий For и Range (Игнорировать Индекс) : ")

  total := 0
  for _, value := range ids {
    total = total + value
  }
  fmt.Println("всего всех идентификаторов = ", total)

  // Инициализировать целочисленный массив последовательностью
  fmt.Println()
  fmt.Println("8. Инициализировать целочисленный массив последовательностью : ")
  var sequence [10]int
  counter := 10
  for index, _ := range sequence {
    sequence[index] = counter
    counter = counter + 5
  }
  fmt.Println("sequence = ",sequence)

  // Многомерный массив
  fmt.Println()
  fmt.Println("9. Многомерный массив : ")

  count := 1
  var multi [4][2]int
   for i := 0; i < 4; i++ {
       for j := 0; j < 2; j++ {
           multi[i][j] = count
           count++
       }
   }
   fmt.Println("Массив 4 x 2 : ", multi)

}

 

Полный вывод для приведенного выше примера кода:

1. Строковый массив :
mydistro =  CentOS
distros[2] =  RedHat
distros =  [Ubuntu CentOS RedHat Debian OpenBSD]
Количество дистрибутивов =  5

2. Целочисленный массив :
myid =  4
ids[2] =  3
ids =  [1 2 3 4 5]
Количество идентификаторов =  5

3. Одновременно объявить и инициализировать массив :
os =  [Linux Mac Windows]
Количество ОС =  3
fibonacci =  [1 1 2 3 5 8]

4. Синтаксис инициализации многострочного массива :
temperature =  [98.5 65.5 83.2]
names =  [AndreyEx Jason Alica]

5. Значения по умолчанию в массиве :
empIds =  [101 102 103 0 0]
empNames =  [AndreyEx Jason   ]

6. Цикл через массив, использующий For и Range :
0  =  Ubuntu
1  =  CentOS
2  =  RedHat
3  =  Debian
4  =  OpenBSD

7. Цикл через массив, использующий For и Range (Игнорировать Индекс) :
всего всех идентификаторов =  15

8. Инициализировать целочисленный массив последовательностьюИнициализировать целочисленный массив последовательностьюИнициализировать целочисленный массив последовательностью :
sequence =  [10 15 20 25 30 35 40 45 50 55]

9. Многомерный массив :
Массив 4 x 2 :  [[1 2] [3 4] [5 6] [7 8]]

Если вы нашли ошибку, пожалуйста, выделите фрагмент текста и нажмите Ctrl+Enter.

1 Звезда2 Звезды3 Звезды4 Звезды5 Звезд (2 оценок, среднее: 5,00 из 5)
Загрузка...
Поделиться в соц. сетях:
0 0 голоса
Рейтинг статьи
Подписаться
Уведомить о
guest

**ссылки nofollow

0 комментариев
Старые
Новые Популярные
Межтекстовые Отзывы
Посмотреть все комментарии

Читайте также

Спасибо!

Теперь редакторы в курсе.