当一个数组中大部分元素为0,或者为同一个值的数组时,可以使用稀疏数组来保存该数组
处理方法:
- 记录数组一共有几行几列,有多少个不同的值
- 把具有不同值的元素的行列及值记录在一个小规模的数组中,以达到“压缩”功能
举例:
[0 0 12 0 5 行 列 值 0 11 0 3 0 0 2 12 1 0 6 0 0 ---> 0 4 5 0 41 0 0 0 1 1 11 0 0 0 9 0] 1 3 3 2 0 1 2 2 6 3 1 41 4 3 9
type ValNode struct {
row int
col int
val int
}
func main() {
var Arr [11][11]int
Arr[1][2] = 1
Arr[2][3] = 2
// 原数组
for _, v := range Arr{
for _, v2 := range v{
fmt.Printf("%d ", v2)
}
fmt.Println()
}
// 转为稀疏数组
var sArr []ValNode
// 标准的稀疏数组应该有I个记录原始微微数组的行列和默认值(默认值都为0)
varNode := ValNode{
row: len(Arr),
col: len(Arr[0]),
val: 0,
}
sArr = append(sArr, varNode)
for i, v := range Arr{
for j, v2 := range v{
if v2 != 0 {
valNode := ValNode{
row: i,
col: j,
val: v2,
}
sArr = append(sArr, valNode)
}
}
}
// 稀疏数组
for i, v :=range sArr{
fmt.Printf("%d行: %d %d %d\n", i, v.row, v.col, v.val)
}
// 将稀疏数组存盘,在从磁盘读取稀疏数组,转为原始数组
}
转换后结果:
0行: 11 11 0
1行: 1 2 1
2行: 2 3 2