当一个数组中大部分元素为0,或者为同一个值的数组时,能够应用稠密数组来保留该数组

如下图,在一个二维数组中大部分是同一个数,这样的状况就能够应用稠密数组来保留数据

实现一个稠密数组

package mainimport (    "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 //蓝子    //2. 输入看看原始的数组    for _, v := range chessMap { for _, v2 := range v {        fmt.Printf("%d\t", v2)    }        fmt.Println()    }    //3. 转成稠密数组    //(1). 遍历 chessMap,  如果咱们发现有一个元素的值不为 0,创立一个 node 构造体    //(2). 将其放入到对应的切片即可    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)            }        }    }    //4. 输入稠密数组    fmt.Println("\n以后的稠密数组是:::::")    for _, valNode := range sparseArr {        fmt.Printf("%d %d %d\n", valNode.row, valNode.col, valNode.val)    }    // 先创立一个原始数组    var chessMap2 [11][11]int    // 遍历 sparseArr [遍历文件每一行]    for i, valNode := range sparseArr {        if i != 0 {            //跳过第一行记录值            chessMap2[valNode.row][valNode.col] = valNode.val        }    }    //看看chessMap2是不是复原 .    fmt.Println("复原后的原始数据    ")    for _, v := range chessMap2 {        for _, v2 := range v {            fmt.Printf("%d\t", v2)        }    fmt.Println()    }}

执行的输入为

>go run main.go0       0       0       0       0       0       0       0       0       0       00       0       1       0       0       0       0       0       0       0       00       0       0       2       0       0       0       0       0       0       00       0       0       0       0       0       0       0       0       0       00       0       0       0       0       0       0       0       0       0       00       0       0       0       0       0       0       0       0       0       00       0       0       0       0       0       0       0       0       0       00       0       0       0       0       0       0       0       0       0       00       0       0       0       0       0       0       0       0       0       00       0       0       0       0       0       0       0       0       0       00       0       0       0       0       0       0       0       0       0       0以后的稠密数组是:::::11 11 01 2 12 3 2复原后的原始数据0       0       0       0       0       0       0       0       0       0       00       0       1       0       0       0       0       0       0       0       00       0       0       2       0       0       0       0       0       0       00       0       0       0       0       0       0       0       0       0       00       0       0       0       0       0       0       0       0       0       00       0       0       0       0       0       0       0       0       0       00       0       0       0       0       0       0       0       0       0       00       0       0       0       0       0       0       0       0       0       00       0       0       0       0       0       0       0       0       0       00       0       0       0       0       0       0       0       0       0       00       0       0       0       0       0       0       0       0       0       0