go 稀疏数组

当一个数组中大部分元素为0,或者为同一个值的数组时,可以使用稀疏数组来保存该数组

如下图,在一个二维数组中大部分是同一个数,这样的情况就可以使用稀疏数组来保存数据
go 稀疏数组_第1张图片

实现一个稀疏数组

package main
import (
    "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.go
0       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

当前的稀疏数组是:::::
11 11 0
1 2 1
2 3 2
恢复后的原始数据
0       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

你可能感兴趣的:(go)