go 稀疏数组
稀疏数组实现:
package main import "fmt" type SparseArray struct { col int row int value int } func main() { // 源数据格式: /* 0 0 0 2 0 0 0 0 0 0 0 0 1 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 */ va := [10][10]int{} va[0][3] = 2 va[1][2] = 1 fmt.Println("原稀疏数组") for _, v := range va { for _, v2 := range v { fmt.Printf("%d\t", v2) } fmt.Printf("\n") } // 生成稀疏数组 var sparseArray []SparseArray baseArray := SparseArray{ col: 11, row: 11, value: 0, } sparseArray = append(sparseArray, baseArray) for i, v := range va { for j, v2 := range v { if v2 != 0 { var array = SparseArray{ col: i, row: j, value: v2, } sparseArray = append(sparseArray, array) } } } // 打印稀疏数组 fmt.Printf("稀疏数组: %v\n", sparseArray) // 恢复稀疏数组 // 1、先获取x轴、y轴及默认值val baseNum := sparseArray[0] fmt.Printf("x轴: %d\ny轴: %d\n默认值val: %d\n", baseNum.col, baseNum.row, baseNum.value) x := baseNum.col y := baseNum.row val := baseNum.value // 2、 恢复 for i := 0; i < x; i++ { for j := 0; j < y; j++ { // 获取稀疏数组中的数据,防止下标溢出 if i+1 < len(sparseArray) { array := sparseArray[i+1] // 当col 和 row 与稀疏数组中的col、row对应时,打印value值 if array.col == i && array.row == j { fmt.Printf("%d\t", array.value) } else { // 其他情况下值为:默认值 fmt.Printf("%d\t", val) } } else { fmt.Printf("%d\t", val) } } println("") } // 可以考虑落盘(先把稀疏数组写入文件,再从文件中读出) }