码迷,mamicode.com
首页 > 编程语言 > 详细

Go-稀疏数组

时间:2021-02-22 12:42:19      阅读:0      评论:0      收藏:0      [点我收藏+]

标签:相同   包含   第一个   pen   转化   int   数据格式   不重复   var   

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

  

Go-稀疏数组

标签:相同   包含   第一个   pen   转化   int   数据格式   不重复   var   

原文地址:https://www.cnblogs.com/2bjiujiu/p/14426506.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!