稀疏数组

package main

import (
	"fmt"
	"reflect"
)

//展示矩阵
func ShowMatrix(arg interface{}) {

	value := reflect.ValueOf(arg) //反射获得值
	switch value.Kind() {//变量的类型
	case reflect.Slice, reflect.Array:
		rows := value.Len()
		cols := value.Index(0).Len()
		for i := 0; i < rows; i++ {
			for j := 0; j < cols; j++ {
				fmt.Printf("%v", value.Index(i).Index(j))
			}
			fmt.Println()
		}
	case reflect.Int:
		fmt.Println(value)
		fmt.Println("数字")
	}
}

//生成稀疏数组
func ToSparse(arr [9][9]int) [][3]int {
	dataCap := 0
	spareArr := make([][3]int, 1) //切片设计一个容量,下一个步骤才好赋值
	spareArr[0] = [3]int{9, 9, 0}
	//spareArr = append(spareArr,[3]int{9, 9, 0}) //append 自动给切片扩容
	for i, v := range arr {
		for k, vv := range v {
			if vv != 0 {
				dataCap++
				spareArr = append(spareArr, [3]int{i, k, vv})
			}
		}
	}
	spareArr[0][2] = dataCap
	return spareArr
}

//恢复原始数组
func ToOrange(spareArr [][3]int) [9][9]int {
	arr1 := [9][9]int{}
	//恢复原始数组
	for i, v := range spareArr {
		if i != 0 {
			arr1[v[0]][v[1]] = v[2]
		}
	}
	return arr1
}

func main() {
	param1 := [9][9]int{}
	param1[1][4] = 1
	param1[4][2] = 2
	ShowMatrix(param1)
	//稀疏数组
	res := ToSparse(param1)
	fmt.Println(res)
	////原始数组
	res1 := ToOrange(res)
	fmt.Println(res1)

}

  

posted on 2021-10-28 23:59  running-fly  阅读(10)  评论(0编辑  收藏  举报

导航