2016-10-05 35 views
7

Golangで一連の数値を生成したいのですが、このための組み込み関数が見つかりません。
は基本的に私はGolangでPHPのrange機能と同等のものを欲しい:Golangで数列を生成するには?

array range (mixed $start , mixed $end [, number $step = 1 ]) 

数値型のスライス/配列を作成し、それを移入/数字のシーケンスで初期化したい場合には有用であろう。

答えて

12

Go標準ライブラリにPHPのrangeと等価なものはありません。自分で作成する必要があります。それを使用して

func makeRange(min, max int) []int { 
    a := make([]int, max-min+1) 
    for i := range a { 
     a[i] = min + i 
    } 
    return a 
} 

a := makeRange(10, 20) 
fmt.Println(a) 

出力(Go Playground上でそれを試してみてください):

[10 11 12 13 14 15 16 17 18 19 20] 

はまた範囲が小さい場合に注意最も簡単なのはforループを使用することですcomposite literal

a := []int{1, 2, 3} 
fmt.Println(a) // Output is [1 2 3] 
を使用できます
3

1 - あなたは使用することができます:

//Create a slice containing a range of elements. 
// 
// start: First value of the sequence. 
// end: The sequence is ended upon reaching the end value. 
// step: step will be used as the increment between elements in the sequence. 
//   step should be given as a positive number. 
// 
//Return Values: Returns a slice of elements from start to end, inclusive. 
func NewSlice(start, end, step int) []int { 
    if step <= 0 || end < start { 
     return []int{} 
    } 
    s := make([]int, 0, 1+(end-start)/step) 
    for start <= end { 
     s = append(s, start) 
     start += step 
    } 
    return s 
} 

The Go Playground上でそれを試してみてください。

package main 

import "fmt" 

//Create a slice containing a range of elements. 
// 
// start: First value of the sequence. 
// end: The sequence is ended upon reaching the end value. 
// step: step will be used as the increment between elements in the sequence. 
//   step should be given as a positive number. 
// 
//Return Values: Returns a slice of elements from start to end, inclusive. 
func NewSlice(start, end, step int) []int { 
    if step <= 0 || end < start { 
     return []int{} 
    } 
    s := make([]int, 0, 1+(end-start)/step) 
    for start <= end { 
     s = append(s, start) 
     start += step 
    } 
    return s 
} 

func main() { 
    s := []int{0, 1, 2, 3, 4, 5, 6, 7, 8, 9} 
    fmt.Println(s) // [0 1 2 3 4 5 6 7 8 9] 

    fmt.Println(NewSlice(10, 19, 1)) // [10 11 12 13 14 15 16 17 18 19] 
    fmt.Println(NewSlice(10, 28, 2)) // [10 12 14 16 18 20 22 24 26 28] 
    fmt.Println(NewSlice(-10, -1, 1)) // [-10 -9 -8 -7 -6 -5 -4 -3 -2 -1] 
} 

2 - あなたが使用することができます:

// Returns a slice of elements with exact count. 
// step will be used as the increment between elements in the sequence. 
// step should be given as a positive, negative or zero number. 
func NewSlice(start, count, step int) []int { 
    s := make([]int, count) 
    for i := range s { 
     s[i] = start 
     start += step 
    } 
    return s 
} 

The Go Playground上でそれを試してみてください。

package main 

import "fmt" 

func NewSlice(start, count, step int) []int { 
    s := make([]int, count) 
    for i := range s { 
     s[i] = start 
     start += step 
    } 
    return s 
} 

func main() { 
    s := []int{0, 1, 2, 3, 4, 5, 6, 7, 8, 9} 
    fmt.Println(s) // [0 1 2 3 4 5 6 7 8 9] 

    fmt.Println(NewSlice(10, 10, 1)) // [10 11 12 13 14 15 16 17 18 19] 
    fmt.Println(NewSlice(10, 10, 2)) // [10 12 14 16 18 20 22 24 26 28] 
    fmt.Println(NewSlice(-1, 10, -1)) // [-1 -2 -3 -4 -5 -6 -7 -8 -9 -10] 
    fmt.Println(NewSlice(20, 10, 0)) // [20 20 20 20 20 20 20 20 20 20] 
} 
関連する問題