package main import "fmt" // 稀疏数组 // 1. 二维数组 // 2. 存在大量相同相同数据和少量不同数据 // 思维: 将大量相同数据转化为: (数据: 频率 或 位置) 的数据格式以简化稀疏数组的存储 // ValNode 值节点,包含行、列、值 type ValNode struct { Row int Col int Val int } func main() { // 1. 初始化原始数据 var chess [11][11]int chess[1][1] = 1 chess[2][2] = 2 // 2. 遍历这个二维数据 for _, v := range chess { for _, v2 := range v { fmt.Printf("%v ", v2) } fmt.Println() } //0 0 0 0 0 0 0 0 0 0 0 //0 1 0 0 0 0 0 0 0 0 0 //0 0 2 0 0 0 0 0 0 0 0 //0 0 0 0 0 0 0 0 0 0 0 //0 0 0 0 0 0 0 0 0 0 0 //0 0 0 0 0 0 0 0 0 0 0 //0 0 0 0 0 0 0 0 0 0 0 //0 0 0 0 0 0 0 0 0 0 0 //0 0 0 0 0 0 0 0 0 0 0 //0 0 0 0 0 0 0 0 0 0 0 //0 0 0 0 0 0 0 0 0 0 0 // 3.转化为稀疏数组 // 分析得知: 原始数组 chess 是11行11列的数据,大量重复原始是0,少量不重复元素是1 2 var spareArray []ValNode // 1. 添加第一个元素,包含原始数组的行、列、大量数据的值 rootValNode := ValNode{ Row: 11, Col: 11, Val: 0, } spareArray = append(spareArray, rootValNode) // 2. 遍历二维数组,进行转换 for row, v := range chess { for col, v2 := range v { if v2 != 0 { valNode := ValNode{ Row: row, Col: col, Val: v2, } spareArray = append(spareArray, valNode) } } } // 3. 输出最后的稀疏数组值 fmt.Println(spareArray) // [{11 11 0} {1 1 1} {2 2 2}] }