前言
先看一个实际的需求:编写的五子棋程序中,有存盘退出和续盘恢复的功能:
1.需求分析:
分析按照原始的方式来的二维数组的问题,因为该二维数组的很多值是默认值 0, 因此记录了很多没有意义的数据。稀疏数组的处理方法是:
1) 记录数组一共有几行几列,有多少个不同的值 。
2) 把具有不同值的元素的行列及值记录在一个小规模的数组中,从而缩小程序的规模。
3) 把稀疏数组存盘,并且可以从新恢复原来的二维数组数。
2、代码实现
代码如下(示例):
package main
import (
"bufio"
"fmt"
"io"
"os"
"strconv"
"strings"
)
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 _,v := range chessMap {
for _,j := range v {
fmt.Printf("%d\t",j)
}
fmt.Println()
}
//3. 转成稀疏数组。
//(1). 遍历 chessMap, 如果我们发现有一个元素的值不为 0,创建一个 node 结构体
//(2). 将其放入到对应的切片即可
var sparseArr []ValNode
//标准的一个稀疏数组应该还有一个 记录元素的二维数组的规模(行和列,默认值)
//创建一个 ValNode 值结点
valNode := ValNode{
row : 11,
col : 11,
val : 0,
}
sparseArr = append(sparseArr