稀疏数组

package main
import "fmt"
// 稀疏数组
func main() {
// 声明一个8x8的二维数组
var array [8][8]int
// 初始化一些值
array[1][2] = 1
array[2][3] = 2
// 遍历二维数组
for _, v := range array {
for _, z := range v {
fmt.Printf("%v ",z)
}
fmt.Println()
}
// 将二维数组转换为稀疏数组
// 稀疏数组固定3列 = 行 、列、值
// 获取二维数组的行
var sums int
for _, v := range array {
for _, z := range v {
if z != 0 {
sums++
}
}
}
// 因为稀疏数组多一行用来存储原来的二维数组信息,所以稀疏数组的行为sums+1 列为 3
// 创建稀疏数组
sparseArray := make([][3]int, sums+1)
// 插入第一行数据
sparseArray[0][0] = len(array) //行
sparseArray[0][1] = len(array[0]) // 列
sparseArray[0][2] = sums // 多少个数据
// 遍历二维数组,那个位置有值,就直接存入稀疏数组
//定义稀疏数组的 行值 行值从第二行开始存,所以为下标为1
count := 1
for k, v := range array {
for i ,z:= range v {
if z != 0{
sparseArray[count][0] = k
sparseArray[count][1] = i
sparseArray[count][2] = z
count++
}
}
}
//遍历稀疏数组
for _, v := range sparseArray {
for _, z := range v {
fmt.Printf("%v ",z)
}
fmt.Println()
}
// 在还原二维数组
// 创建二维数组
array2 := make([][]int, sparseArray[0][0])
for i:= range array2 {
array2[i] = make([]int,sparseArray[0][1])
}
// 还原数组
for i := 1; i < len(sparseArray); i++ {
array2[sparseArray[i][0]][sparseArray[i][1]] = sparseArray[i][2]
}
// 遍历二维数组
for _, v := range array2 {
for _, z := range v {
fmt.Printf("%v ",z)
}
fmt.Println()
}
}