В этой статье вы увидите несколько способов, с помощью которых вы можете получить сумму заданного массива или среза в Golang. Вы можете использовать несколько способов, чтобы получить сумму массива/среза в Golang, например, повторяющийся цикл по каждому индексу массива. , Другими словами, вы можете использовать рекурсивный подход для получения суммы массива или среза. Это зависит от разработчика, каким образом он / она хочет получить сумму своего заданного массива или среза.

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

  • Использование цикла for range
  • Использование for(i:=0;i‹len(arr;i++)
  • Использование цикла for(while)
  • Использование рекурсивной функции
  • Вариадная функция

1. Сумма среза/массива, используемого для цикла диапазона

for index, value := range arr {
  // do whatever
}
package main

import (
    "fmt"
)

func sum(arr []int) int {
    sum := 0
    for idx, value := range arr {
        sum += value
        fmt.Printf("idx: %d, sum: %d\n", idx, sum)
    }
    return sum
}

func main() {
    fmt.Println("How to get sum of slice/array using Golang...")

    // slice
    arr := []int{1, 2, 3, 4, 5, 6, 7, 8, 9, 10}
    result := sum(arr)
    fmt.Printf("slice: %v\n", arr)
    fmt.Printf("sum of slice is: %d\n", result)

}

Если вы попытаетесь запустить этот код на своем компьютере, вы увидите приведенный ниже вывод в своем терминале:

$ go run main.go
How to get sum of slice/array using Golang…
idx: 0, sum: 1
idx: 1, sum: 3
idx: 2, sum: 6
idx: 3, sum: 10
idx: 4, sum: 15
idx: 5, sum: 21
idx: 6, sum: 28
idx: 7, sum: 36
idx: 8, sum: 45
idx: 9, sum: 55
slice: [1 2 3 4 5 6 7 8 9 10]
sum of slice is: 55

2. Использование for i:=0;i‹len(arr);i++

package main

import (
    "fmt"
)

func sum(arr []int) int {
    sum := 0
    for idx := 0; idx < len(arr); idx++ {
        sum += arr[idx]
        fmt.Printf("idx: %d, sum: %d\n", idx, sum)
    }
    return sum
}

func main() {
    fmt.Println("How to get sum of slice/array using Golang...")

    // slice
    arr := []int{1, 2, 3, 4, 5, 6, 7, 8, 9, 10}
    result := sum(arr)
    fmt.Printf("slice: %v\n", arr)
    fmt.Printf("sum of slice is: %d\n", result)

}

Вывод:

$ go run main.go
How to get sum of slice/array using Golang…
idx: 0, sum: 1
idx: 1, sum: 3
idx: 2, sum: 6
idx: 3, sum: 10
idx: 4, sum: 15
idx: 5, sum: 21
idx: 6, sum: 28
idx: 7, sum: 36
idx: 8, sum: 45
idx: 9, sum: 55
slice: [1 2 3 4 5 6 7 8 9 10]
sum of slice is: 55

3. Использование цикла for(while) | вечная петля

В Golang вы можете использовать цикл for несколькими способами, и один из них таков: для использования цикла for, поскольку вам не нужно добавлять какое-либо выражение, как мы делали в предыдущих примерах, чтобы остановить его, вам нужно добавить условие внутри цикла for и нужно использовать ключевое слово break, чтобы выйти из цикла всякий раз, когда это условие выполняется.

Для большего понимания давайте посмотрим код

package main

import (
    "fmt"
)

func sum(arr []int) int {
    sum := 0
    idx := 0
    for {
        if idx > len(arr)-1 {
            break
        }
        sum += arr[idx]
        fmt.Printf("idx: %d, sum: %d\n", idx, sum)
        idx++
    }
    return sum
}

func main() {
    fmt.Println("How to get sum of slice/array using Golang...")

    // slice
    arr := []int{1, 2, 3, 4, 5, 6, 7, 8, 9, 10}
    result := sum(arr)
    fmt.Printf("slice: %v\n", arr)
    fmt.Printf("sum of slice is: %d\n", result)

}

Как вы можете видеть, в функции суммы мы не добавили никакого выражения рядом с ключевым словом for, и поэтому оно заставляет его работать или вести себя как цикл while (в Golang напрямую нет ключевого слова while), также внутри цикла for вы можете увидеть сначала мы добавили наше условие останова, потому что мы хотим, чтобы наша программа немедленно выходила из цикла всякий раз, когда условие выполнялось (чтобы избежать любого конфликта или разрыва кода).

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

Запуск этого кода приведет к следующему выводу:

$ go run main.go
How to get sum of slice/array using Golang…
idx: 0, sum: 1
idx: 1, sum: 3
idx: 2, sum: 6
idx: 3, sum: 10
idx: 4, sum: 15
idx: 5, sum: 21
idx: 6, sum: 28
idx: 7, sum: 36
idx: 8, sum: 45
idx: 9, sum: 55
slice: [1 2 3 4 5 6 7 8 9 10]
sum of slice is: 55

4. Использование рекурсивной функции

В этом блоке мы собираемся использовать рекурсивную функцию для получения суммы заданного среза/массива. Итак, каким будет подход к получению суммы с использованием рекурсии. Нам просто нужно изменить нашу функцию суммы (использовавшуюся ранее в предыдущих примерах).

  • Добавьте два параметра функции: первый срез/массив, второй — длина.
  • Внутри функции суммы нам нужно добавить условие для проверки второго параметра, длина которого равна ‹= 0, если это правда, то вернуть 0.
  • вызов функции суммы внутри функции суммы во время возврата, поэтому она будет напрямую возвращать сумму на каждой итерации, которую она выполняла внутренне (рекурсивно).
package main

import (
    "fmt"
)

func sum(arr []int,n int) int {
  if n <= 0 {
    return 0
  }
    return (sum(arr, n - 1) + arr[n - 1])
}

func main() {
    fmt.Println("How to get sum of slice/array using Golang...")

    // slice
    arr := []int{1, 2, 3, 4, 5, 6, 7, 8, 9, 10}
    result := sum(arr,len(arr))
    fmt.Printf("slice: %v\n", arr)
    fmt.Printf("sum of slice is: %d\n", result)

}

Вывод:

$ go run main.go
How to get sum of slice/array using Golang…
slice: [1 2 3 4 5 6 7 8 9 10]
sum of slice is: 55

5. Использование функции Variadic

Вы можете использовать все упомянутые способы, используя вариационную функцию, но в этой статье я буду использовать цикл for(while).

Во всех вышеперечисленных функциях ожидается рекурсивный, вы также можете использовать рекурсивный, но вам может понадобиться одна дополнительная переменная, чтобы сначала сохранить все элементы, а затем передать как arr, так и length, поэтому лучше использовать вариативный во всех подходах, ожидающих рекурсивного.

package main
import (
    "fmt"
)
func sum(arr ...int) int {
    sum := 0
    idx := 0
    for {
        if idx > len(arr)-1 {
            break
        }
        sum += arr[idx]
        fmt.Printf("idx: %d, sum: %d\n", idx, sum)
        idx++
    }
    return sum
}
func main() {
    fmt.Println("How to get sum of slice/array using Golang...")
    // slice
    arr := []int{1, 2, 3, 4, 5, 6, 7, 8, 9, 10}
    result := sum(arr...)
    fmt.Printf("slice: %v\n", arr)
    fmt.Printf("sum of slice is: %d\n", result)
}

Ниже приведен вывод следующего кода:

$ go run main.go
How to get sum of slice/array using Golang…
idx: 0, sum: 1
idx: 1, sum: 3
idx: 2, sum: 6
idx: 3, sum: 10
idx: 4, sum: 15
idx: 5, sum: 21
idx: 6, sum: 28
idx: 7, sum: 36
idx: 8, sum: 45
idx: 9, sum: 55
slice: [1 2 3 4 5 6 7 8 9 10]
sum of slice is: 55

Эта статья первоначально была опубликована на сайте programmingeeksclub.com

Мой личный блог-сайт: Клуб программистов
Моя страница в Facebook: Клуб программистов
Мой канал в Telegram: Programming Geeks Club Клуб гиков»
Мой аккаунт в Твиттере: Кулдип Сингх

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