在分配新变量时切片数组

时间:2017-09-27 16:34:45

标签: algorithm loops go

我想每次创建基于10字节切片的新变量,直到达到len(number)。但是,Go一直给我以下错误:

  

左侧的非名称变量_ [i]:=

这是我到目前为止所尝试的

for i := 0; i < len(number); i += 10 {
        variable_[i] := number[i : i+10]
    }

我也试过了追加,但它也没有用。

知道怎么做吗?

数字是一个变量,所以它不是一个常数(它可以改变大小) 所以我事先并不知道我想要循环创建多少个新变量。

2 个答案:

答案 0 :(得分:4)

Go不是解释型语言,因此您无法在运行时创建变量名称并为其指定一些变量。但是您可以使用map并将新变量指定为具有适当值的键:

package main

import (
    "fmt"
)

func main() {
    variable := make(map[int][]int)

    number := []int{1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20}

    for i := 0; i < len(number); i += 10 {
        variable[i] = number[i : i+10]

    }
    fmt.Println(variable)

}

https://play.golang.org/p/6VYM0vuBmU

输出(由我格式化以获得更好的可更正性):

map[
   0: [1 2 3 4 5 6 7 8 9 10] 
   10:[11 12 13 14 15 16 17 18 19 20]
]

variable[0]variable[10]是10个整数的切片。

答案 1 :(得分:0)

我认为这可以实现你的目标。

package main

import (
    "fmt"
    "math/rand"
)

func main() {
    //get some random byte data
    number := make([]byte, 27)
    rand.Read(number)
    fmt.Println("all the bytes: ", number)

    //make an output variable
    var tensOfBytes [][]byte

    //loop through number
    for i := 10; i < len(number); i += 10 {
        //get a chunk of values and store it in tensOfBytes
        tensOfBytes = append(tensOfBytes, number[i - 10 : i])
    }

    fmt.Println("bytes in 10s:")
    for _, chunk := range tensOfBytes {
        fmt.Println("\t", chunk)
    }
}

https://play.golang.org/p/BKQB7JwSHw

通常,您需要注意该循环中的索引......

  • 如果你确定字节数是10的倍数,你就可以了。
  • i每次迭代循环增加10,小心使用它作为另一个变量的索引..
  • 可能是其他边缘案例..