go稀疏数组

稀疏数组

稀疏数组

在这里插入图片描述
在这里插入图片描述

package test

import (
	"encoding/json"
	"fmt"
	"io/ioutil"
	"log"
	"reflect"
	"testing"
)

type ValNode struct {
	Row int `json:"row"`
	Col int `json:"col"`
	Val int `json:"val"`
}

func TestSparseArray(t *testing.T) {
	// 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 转成稀疏数组
	var sparseArray []ValNode
	sparseArray = append(sparseArray, ValNode{len(chessMap), len(chessMap[0]), 0})
	for i, v := range chessMap {
		for j, v2 := range v {
			if v2 != 0 {
				// 创建一个值节点
				valNode := ValNode{
					Row: i,
					Col: j,
					Val: v2,
				}
				sparseArray = append(sparseArray, valNode)
			}

		}
	}
	// 输出稀疏数组
	for i, valNode := range sparseArray {
		fmt.Printf("%d: %d\t%d\t%d\n", i, valNode.Row, valNode.Col, valNode.Val)
	}

	// 将这个稀疏数组存盘
	// Serialize slice of ValNode
	marshal, err := json.Marshal(sparseArray)
	if err != nil {
		log.Fatal("json.Marshal", err)
	}
	log.Println("Serialized slice of ValNode:", string(marshal))

	// to-db
	err = ioutil.WriteFile("./output.txt", marshal, 0644)
	if err != nil {
		log.Fatal("写入文件时发生错误:", err)
	}
	log.Println("数据成功写入文件。")

	// read-db
	data, err := ioutil.ReadFile("./output.txt")
	if err != nil {
		log.Fatal("读取文件时发生错误:", err)
	}
	log.Println("数据成功写入文件。")

	// Deserialize slice of ValNode
	var unmarshal []ValNode
	err = json.Unmarshal(data, &unmarshal)
	if err != nil {
		log.Fatal("json.Unmarshal", err)
	}
	log.Println("Deserialized slice of ValNode:", unmarshal)
	log.Println("Type of Deserialized slice of ValNode:", reflect.TypeOf(unmarshal))
	// 创建一个原始数组
	// 创建一个二维切片,包含 11 行
	chessMap2 := make([][]int, unmarshal[0].Row)

	// 初始化每一行元素为包含 11 个元素的切片
	for i := range chessMap2 {
		chessMap2[i] = make([]int, unmarshal[0].Col)
	}
	for i, valNode := range unmarshal {
		if i != 0 {
			chessMap2[valNode.Row][valNode.Col] = valNode.Val
		}

	}
	// 看看chessMap2 是不是恢复
	// 输出稀疏数组
	for _, v := range chessMap2 {
		for _, v2 := range v {
			fmt.Printf("%d\t", v2)
		}
		fmt.Println()
	}
}

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
在Go语言中,有两种常见的方式可以遍历数组。第一种方式是使用for循环和索引的形式遍历数组。代码示例如下: ``` package main import ( "fmt" ) func main() { arr := [5]int{1, 2, 3, 4, 5} for i := 0; i < len(arr); i++ { fmt.Println(arr[i]) } } ``` 这种方式使用一个循环变量i来表示数组的索引,通过递增i的值来遍历数组元素。在每次循环中,通过`arr[i]`来获取数组中的元素,并进行相应的操作。 第二种方式是使用for range循环来遍历数组。代码示例如下: ``` package main import ( "fmt" ) func main() { arr := [5]int{1, 2, 3, 4, 5} for index, value := range arr { fmt.Println(index, value) } } ``` 这种方式中,for range循环会遍历数组中的每个元素,并将索引和对应的值分别赋给index和value变量。在每次循环中,可以直接使用index和value来操作数组元素。 总结起来,通过for循环加索引和for range循环是两种常见的在Go语言中遍历数组的方式。可以根据具体的需求选择合适的方式来进行数组的遍历。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *2* *3* [go语言中遍历数组的方法有哪些](https://blog.csdn.net/yaxuan88521/article/details/129194466)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 100%"] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值