是否可以在多维数组上使用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) 是否有可能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}.这是一种类型转换,对吗?
试图教自己,发现很难找到例子,我的大脑已经结束了.非常不确定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) 我有大约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