package main
import "fmt"
//如果原始数组中元素个数较少,那么存储的话比较浪费空间,因此可以使用稀疏数组的办法解决该问题
//稀疏数组 : 用于节省存储空间
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 //蓝子
//输出原始数组
for _, v := range chessMap {
for _, v2 := range v {
fmt.Printf("%d\t", v2)
}
fmt.Println()
}
//转成稀疏数组
//1 遍历chessMap,如果发现有一个元素的值不为0,创建一个node结构体,
//2 放入到切片中
var sparseArr []ValNode
//注意:标准的稀疏数组还有一个记录元素的二维数组的规模(行和列,默认值),一般放在头部位置
valNode := ValNode{
row: 11,
col: 11,
val: 0, //默认值
}
sparseArr = append(sparseArr, valNode)
for i, v := range chessMap {
for j, v2 := range v {
if v2 != 0 {
//创建ValNode
valNode = ValNode{
row: i,
col: j,
val: v2,
}
sparseArr = append(sparseArr, valNode)
}
}
}
//输出稀疏数组
for i, valNode := range sparseArr {
fmt.Printf("%d: %d %d %d\n", i, valNode.row, valNode.col, valNode.val)
}
}