Head First Go - 第五部分数组


1. 数组的声明和零值

声明语句:

var myArray [4]int

零值:数字类型初始化为0,string初始化为空串,bool初始化为false

package main

import "fmt"

func main() {
	var myArray [4]int
	fmt.Printf("myArray: %v\n", myArray)		//myArray: [0 0 0 0]


赋值:下标赋值

package main

import "fmt"

func main() {
	var myArray [4]string
	myArray[0] = "ddd"
	myArray[1] = "ccc"
	myArray[2] = "aaa"
	myArray[3] = "bbb"
	fmt.Printf("myArray: %v\n", myArray)		//myArray: [ddd ccc aaa bbb]
}



2. 数组字面量和短变量声明

如果实现知道数组里面的值,就可以在声明的时候顺便初始化了。和 java 的区别就是不需要 new,语法格式有些不一样。

var nodes [7]int = [7]int{1,2,3,4,5,6,7};

短变量声明:

notes := [7]string{"a", "b", "c", "d", "e", "f", "g"};

注意一点是如果你声明数组的时候是在不同行赋值的,那么结尾要加上一个逗号

notes := [7]string{
		"a", 
		"b", 
		"c", 
		"d", 
		"e", 
		"f", 
		"g",//这个括号是必须的
	};

在这里插入图片描述



3. 循环里面访问数组

注意下标越界问题:

package main

import "fmt"

func main() {

	notes := [7]string{
		"a", 
		"b", 
		"c", 
		"d", 
		"e", 
		"f", 
		"g",//这个括号是必须的
	};
		
	for i := 0; i <= 6; i++{
		fmt.Println(i, notes[i])
		//0 a
		//1 b
		//2 c
		//3 d
		//4 e
		//5 f
		//6 g
	}
}



4. 使用len函数检查数组长度

len(数组) = 数组长度,这里注意下面使用 < 而不是 <=,避免越界

func main() {

	notes := [7]string{"a", "b", "c", "d", "e", "f", "g"};
		
	for i := 0; i < len(notes); i++{
		fmt.Print(i, notes[i], " ")	//0a 1b 2c 3d 4e 5f 6g
	}
}



5. 使用 for…range 安全遍历数组

格式:for index, value := range notes{}

index就是保存每个元素索引的遍历,value就是用来保存每个变量的值,range是关键字,notes是要处理的数组

package main

import "fmt"

func main() {

	notes := [7]string{"a", "b", "c", "d", "e", "f", "g"};
		
	for index, value := range notes{
		fmt.Print(index, value, " ")		//0a 1b 2c 3d 4e 5f 6g 
	}
}

上面的遍历中,如果 index 或者 value 不想要使用,那么可以用空白标识符

for _, value := range notes{
	fmt.Print(value, " ")		//a b c d e f g
}

案例1:使用 range 遍历求得数组中的数字之和

package main

import "fmt"

func main() {

	ints := [7]int{1,2,3,4,5,6,7}
	sum := 0
	for _, pks := range ints{
		sum += pks
	}
	fmt.Printf("sum: %v\n", sum)	//sum: 28
}

案例2:使用 range 遍历求得数组中的数字平均值

package main

import (
	"fmt"
)

func main() {

	ints := [7]float64{1.0,2.0,3.0,4.0,5.0,6.0,7.0}
	sum := 0.0
	for _, pks := range ints{
		sum += pks
	}
	sampleCount := float64(len(ints));
	fmt.Printf("Average: %0.2f\n", sum/sampleCount)		//Average: 4.00
}



6. 读取文本文件

基础代码

package main

import (
	"bufio"
	"fmt"
	"log"
	"os"
)

func main() {
	file, err := os.Open("five/data.txt")
	if err != nil{
		log.Fatal(err)
	}

	scanner := bufio.NewScanner(file)
	for scanner.Scan(){			//循环读取,每次从文件只能读取一行,一直读取到文件结尾
		fmt.Println(scanner.Text())		//获取读取的这行
		//71.8
		//56.2
		//89.5
	}		

	err = file.Close()		//关闭文件

	if err != nil{
		log.Fatal(err)
	}

	if scanner.Err() != nil{
		log.Fatal(scanner.Err())
	}
}

修改一下,读入数组中

package main

import (
	"bufio"
	"fmt"
	"log"
	"os"
	"strconv"
)

func main() {
	file, err := os.Open("five/data.txt")
	if err != nil{
		log.Fatal(err)
	}

	var strs [3]float64
	var index int = 0	//下标
	scanner := bufio.NewScanner(file)
	for scanner.Scan(){			//从文件只能读取一行
		f, err := strconv.ParseFloat(scanner.Text(), 64)
		if err != nil{
			log.Fatal(err)
		}
		strs[index] = f
		index++
	}		

	err = file.Close()

	if err != nil{
		log.Fatal(err)
	}

	if scanner.Err() != nil{
		log.Fatal(scanner.Err())
	}


	//最后打印出来
	fmt.Printf("strs: %v\n", strs)
	//strs: [71.8 56.2 89.5]
}





如有错误,欢迎指出!!!!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值