go数组转换为稀疏数组

package main

import "fmt"

type Node struct {
   Row   int
   Col   int
   Value int
}

// 稀疏数组
func main() {

   sparse := ToSparse()

   ToArray(sparse)
}

// ToArray 稀疏数组恢复
func ToArray(sparse []Node)  {

   var arr  [11][11]int

   for k, node := range sparse {
      if k != 0 {
         arr[node.Row][node.Col] = node.Value
      }
   }

   fmt.Println("恢复后的原始数据")
   for _, v := range arr {
      fmt.Println(v)
   }



}

// ToSparse 数组转换为稀疏数组
func ToSparse() []Node {
   const row = 11
   const col = 11

   // 1 创建一个原始数组 1 黑子 2 蓝子
   var chessMap [row][col]int

   chessMap[1][2] = 1
   chessMap[2][3] = 2
   // 2 输出查看原始数据
   for _, v := range chessMap {
      fmt.Println(v)
   }

   // 3 转为稀疏数组
   // 遍历chessMap 发现一个元素的值!=0 创建一个node结构体
   // 将其放入到切片中
   var sparseArr []Node
   // 加入规模 标准的稀疏数组 含有 行数 列数
   node0 := Node{
      Row:   row,
      Col:   col,
      Value: 0,
   }
   sparseArr = append(sparseArr, node0)

   for i, v := range chessMap {
      for j, v2 := range v {
         if v2 != 0 {
            // 创建一个节点
            var node = Node{
               Row:   i,
               Col:   j,
               Value: v2,
            }
            sparseArr = append(sparseArr, node)
         }
      }
   }

   // 4 输出查看原始数据
   for _, node := range sparseArr {
      fmt.Printf("%d %d %d \n",node.Row, node.Col, node.Value)
   }

   return sparseArr

[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]

posted @ 2021-10-03 11:26  brady-wang  阅读(38)  评论(0编辑  收藏  举报