社区微信群开通啦,扫一扫抢先加入社区官方微信群
社区微信群
package main
import "fmt"
//稀疏数组示例
//五子棋,棋盘上第二行,第三列有个黑子,第三行,第4列有个蓝色棋子
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 _,v2:=range v{
fmt.Printf("%d\t",v2)
}
fmt.Println()
}
//3.转换层稀疏数组
//遍历原始chessMap,如果我们发现有一个元素的值不为0,创建一个node结构体
//将其放入对应的切片即可
var sparseArr []ValNode
//标准的一个稀疏数组应该有一个记录元素的二维数组的规模(行,列,默认值)
//创建一个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)
}
}
}
//输出稀疏数组
fmt.Println("当前的稀疏数组是...")
for i,valNode:=range sparseArr{
fmt.Printf("%d:%d %d %d\n",i,valNode.row,valNode.col,valNode.val)
}
//2.稀疏数组的恢复
//先创建一个原始数组
var chessMap2 [11][11]int
//遍历sparseArr【遍历文件的每一行】
//0:11 11 0
//1:1 2 1
//2:2 3 2
for i,valNode:=range sparseArr{
if i!=0{//跳过第一行 11,11,0 默认11X11值为0
chessMap2[valNode.row][valNode.col]=valNode.val
}
}
fmt.Println("回复后的原始数据.....")
for _,v:=range chessMap2{
for _,v2:=range v{
fmt.Printf("%d\t",v2)
}
fmt.Println()
}
}
如果觉得我的文章对您有用,请随意打赏。你的支持将鼓励我继续创作!