В тази статия ще видите множество начини, по които можете да получите сумата на даден масив или срез в 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. Използване за 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 цикъл as while не е нужно да добавяте никакъв израз, както направихме в предишните примери, за да спре, трябва да добавите условие вътре в 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)

}

Както можете да видите във функцията sum, ние не сме добавили никакъв израз заедно с ключовата дума 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.
  • извикване на функция sum вътре във функция sum във времето за връщане, така че директно ще върне сумата при всяка итерация, която е извършила вътрешно (рекурсивно).
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

Можете да използвате всички споменати начини, като използвате variadic функция, но в тази статия ще използвам for(while) цикъл.

Във всички горепосочени функции очаквайте рекурсивни, можете да използвате и рекурсивни, но може да се нуждаете от една допълнителна променлива, за да съхраните първо всички елементи и след това да предадете arr и length, така че е по-добре да използвате variadic във всички подходи, очаквайте рекурсивни.

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

Моят личен уебсайт за блогове: Programming Geeks Club
Моята страница във Facebook: Programming Geeks Club
Моят канал в Telegram: Програмиране Geeks Club
Моят Twitter акаунт : Kuldeep Singh

Можете да ме следвате за още интересни статии като тази, също така можете да проверите и моя личен блог.