Go数据结构--稀疏数组

稀疏数组能够节省存储空间

package main

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

// ValNode 定义node结构体
type ValNode struct {
	row int	//行
	col int	//列
	val int	//值
}
func main() {
	//1.先创建一个原始数组
	var chessMap  [11][11]int
	chessMap[1][2] = 1	//黑子
	chessMap[2][3] = 2	//蓝子

	//2.输出原始数据
	for _,v1 := range chessMap{
		for _,v2 := range v1{
			fmt.Printf("%d\t",v2)
		}
		fmt.Println()
	}

	//3.转成稀疏数组
	//(1)遍历原始数据,如果发现值不是0,则创建一个node结构体
	//(2)将其放入到对应的切片

	//定义稀疏数组 在go里面是切片,里面的元素师ValNode
	var sparseArr []ValNode
	//由于需要稀疏数组需要记录二维数组的规模(一共有多少行、多少列、默认值),所以先创建第一个node节点
	valNode := ValNode{
		row: 11,
		col: 11,
		val: 0,
	}
	sparseArr = append(sparseArr,valNode)

	for k1,v1 := range chessMap{
		for k2,v2 := range v1{
			if v2 != 0 {
				//创建一个结构体,存储起来
				valNode := ValNode{
					row: k1,
					col: k2,
					val: v2,
				}
				sparseArr = append(sparseArr,valNode)
			}
		}
	}

	//fmt.Println(sparseArr)
	//写入文件保存
	filePath := "./day1/chess.txt"
	//先格式化字符串
	//for _,v := range sparseArr{
	//	str := fmt.Sprintf("%s %s %s\n",strconv.Itoa(v.row),strconv.Itoa(v.col),strconv.Itoa(v.val))
	//	fmt.Println(str)
	//	err := writeFile(filePath,str)
	//	if err != nil {
	//		fmt.Println("写入失败")
	//	}
	//}


	//读取文件
	//fmt.Println("开始读取")
	//res,err := readFile(filePath)
	//if err != nil{
	//
	//}
	//fmt.Println("返回的结果")
	//fmt.Println(res)
	//arr := strings.Fields(str)

	res,err := readFileGetArr(filePath)
	if err != nil {

	}
	//
	var chessMap2  [11][11]int
	for i,v := range res{
		if i != 0 {
			a,_ := strconv.Atoi(v[0])
			b,_ := strconv.Atoi(v[1])
			c,_ := strconv.Atoi(v[2])
			fmt.Println(a,b,c)
			chessMap2[a][b] = c
		}
	}
	for _,v1 :=range chessMap2{
		for _,v2 := range v1{
			fmt.Print(v2)
		}
		fmt.Println()
	}

}

func writeFile(filePath string,str string) (err error) {
	//1.创建文件对象
	file,err := os.OpenFile(filePath,os.O_WRONLY | os.O_APPEND,0666)
	if err != nil {
		fmt.Println("创建文件对象失败")
		return err
	}
	defer file.Close()

	//2.操作对象
	writer := bufio.NewWriter(file)

	_, err = writer.WriteString(str)
	if err != nil {
		fmt.Println("写入失败")
		return err
	}

	//3.刷新
	err = writer.Flush()
	if err != nil {
		return err
	}
	return nil
}

func readFile(filePath string) (res	string,err error) {
	//打开文件
	file,err := os.Open(filePath)
	if err != nil{
		return "",err
	}

	//创建reader对象
	reader := bufio.NewReader(file)

	for  {
		str,err := reader.ReadString('\n')

		res += str
		if err != nil && err.Error() == "EOF" {
			break
		}
	}
	return res,nil
}

func readFileGetArr(filePath string) (res [][]string,err error) {
	//打开文件
	file,err := os.Open(filePath)
	if err != nil{
		return nil,err
	}

	reader := bufio.NewReader(file)
	for  {
		str,err := reader.ReadString('\n')
		if err != nil && err.Error() == "EOF" {
			break
		}

		arr := strings.Fields(str)
		res = append(res,arr)
	}
	return res,nil
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
站用交流系统断路器保护灵敏度校验整改及剩余电流监测试点应用站用交流系统断路器保护灵敏度校验整改及剩余电流监测试点应用站用交流系统断路器保护灵敏度校验整改及剩余电流监测试点应用站用交流系统断路器保护灵敏度校验整改及剩余电流监测试点应用站用交流系统断路器保护灵敏度校验整改及剩余电流监测试点应用站用交流系统断路器保护灵敏度校验整改及剩余电流监测试点应用站用交流系统断路器保护灵敏度校验整改及剩余电流监测试点应用站用交流系统断路器保护灵敏度校验整改及剩余电流监测试点应用站用交流系统断路器保护灵敏度校验整改及剩余电流监测试点应用站用交流系统断路器保护灵敏度校验整改及剩余电流监测试点应用站用交流系统断路器保护灵敏度校验整改及剩余电流监测试点应用站用交流系统断路器保护灵敏度校验整改及剩余电流监测试点应用站用交流系统断路器保护灵敏度校验整改及剩余电流监测试点应用站用交流系统断路器保护灵敏度校验整改及剩余电流监测试点应用站用交流系统断路器保护灵敏度校验整改及剩余电流监测试点应用站用交流系统断路器保护灵敏度校验整改及剩余电流监测试点应用站用交流系统断路器保护灵敏度校验整改及剩余电流监测试点应用站用交流系统断

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值