小编kil*_*s76的帖子

Go:range和len of multidimensional array?

是否可以在多维数组上使用range和len?

使用var a [3] int8或

package main

func main () {    
        var a [3][5]int8

        for h := range a {
                println(h)
        }
        println(len(a))
}
Run Code Online (Sandbox Code Playgroud)

两者都生产 0 1 2 3

感谢dystroy的回答,这里有一个编写和阅读我能够适应的三维数组的例子(在这里发帖,因为我很难找到任何这样的例子,所以这可能会帮助其他人):

package main
func main() {
    var a [3][5][7]uint8

    //write values to array
    for x, b := range a {
        for y, c := range b {
            for z, _ := range c {
                    a[x][y][z] = uint8(x*100+y*10+z)
                }
        }   
    }

    //read values from array
    for _, h := range a …
Run Code Online (Sandbox Code Playgroud)

arrays range go multidimensional-array

11
推荐指数
1
解决办法
1万
查看次数

Go:使用现有数组的类型和值定义多维数组?

是否有可能a)定义b)使用现有数组初始化一个新的多维数组,如下面的代码而不是var b [2][3]int,只是说出类似的东西var b [2]a
使用任何类型的类型,而不是硬编码(它错过了使用[...]的点).
也许处理初始化=同时复制值?

package main

func main () {
        a := [...]int{4,5,6}
        var b [2][3]int
        b[0],b[1] = a,a 
}
Run Code Online (Sandbox Code Playgroud)

(我知道切片的简易性和方便性,但这个问题是关于理解数组.)

编辑:不敢相信我忘记了var b [2][len(a)]int,初学者的大脑冻结了.一线答案是var b = [2][len(a)]int{a,a}.这是一种类型转换,对吗?

arrays go multidimensional-array

4
推荐指数
1
解决办法
152
查看次数

Go:数组数组,切片数组,数组切片和切片切片

试图教自己,发现很难找到例子,我的大脑已经结束了.非常不确定3和4,并需要帮助使5工作.

package main
import "fmt"

func main () {
    println("0. Array:")
    var a = [...]int{4,5,6,7,8,9} //assign
    fmt.Println(a,"\n")

    println("1. Slice:")
    var as []int
    as = a[:] //assign
    fmt.Println(as,"\n")

    println("2. Array of arrays:")
    var b [4][len(a)]int
    for i:= range b { //assign
        b[i]=a
    }
    fmt.Println(b,"\n")

    println("3. Array of slices:")
    var d [len(b)][]int
    for i:= range b { // assign
        d[i] = b[i][:] //does this really work?
    }
    fmt.Println(d,"\n")

    println("4. Slice of arrays:")
    var c [][len(a)]int
    c = b[:][:] // assign, does this …
Run Code Online (Sandbox Code Playgroud)

arrays go slice multidimensional-array

3
推荐指数
1
解决办法
812
查看次数

2
推荐指数
2
解决办法
210
查看次数

Vim(7.3.3 Windows 64bit):如果没有,则将^ M添加到行尾(ff = unix)

我有大约100,000多个文件,包含部分损坏的数据,混合文本+二进制文件(带有http标头的jpg图像数据的单个文件),其中一些标题字段具有dos样式^ M ^ J行终止,有些只有unix样式^ J .当vim打开这样的文件时,它会将其视为unix格式.所以所有标题行都没有^ M,需要添加一个.但事实证明这非常艰难.

:1,11s/Cache-Control:.*\zs^M\{0,}$/^M/

不起作用,我已经尝试了各种变体,甚至使用\ = printf("%s","^ M")作为替换字符串.但结果始终是文件中的新空行.

我能够通过命令添加^ M的唯一方法是

:exe "normal A\<c-q>\<c-m>\<Esc>"

好吧,所以一种方法是首先删除任何现有的^ M,然后按之前添加它.但是,有一个更优雅,一个命令解决方案?

(这样就不会有误解了,这里有一个简短的例子:

HTTP/1.1 200 OK
Server: Apache/2.2.3
(more lines...)
Cache-Control: public, max-age=214748
(more lines...)

ÿØÿá Exif  II*            ÿì
Run Code Online (Sandbox Code Playgroud)

)

编辑/解决方案:关于100,000多个文件,这里是一个版本(关于仅在缓存控制行上丢失^ M),只有在缺少^ M时才匹配(因为并非所有文件都被修复,这将节省大量时间和"更新")!

:1,11s/^Cache-Control:.\{-}\zs\(^M*$\)\(^M\)\@<!/\^M/i

windows vi vim eol end-of-line

1
推荐指数
1
解决办法
1108
查看次数

标签 统计

arrays ×4

go ×4

multidimensional-array ×3

slice ×2

end-of-line ×1

eol ×1

range ×1

vi ×1

vim ×1

windows ×1