В тази статия ще видите множество начини, по които можете да получите сумата на даден масив или срез в 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
Можете да ме следвате за още интересни статии като тази, също така можете да проверите и моя личен блог.