golang数据结构之稀疏数组

掌握知识:

  • 数组的初始化和赋值
  • 结构体的初始化和赋值
  • 字符串和整型之间的转换以及其它的一些操作
  • 类型断言
  • 读取文件
  • 写入文件
  • 对稀疏数组进行压缩
package main

import (
    "bufio"
    fmtioosstrconvstrings"
    // "strconv"
)

func originArr() [11][11]int {
    创建原始数组
    var chessMap [

    chessMap[1][2] = 1
    chessMap[2][3] = 2
    return chessMap
}

func printArr(chessMap [) {
    打印数组
    for _,v1 := range chessMap {
         range v1 {
            fmt.Printf(%d\t",v2)
        }
        fmt.Println()
    }
}

存储行、列、值
type valNode struct {
    row   
    col   int
    这里是接口类型,所以值可以是任意类型,不仅仅包含整型和字符型
    value interface{}
}

var sparseArr []valNode

func doParseArr(chessMap [) []valNode {
    稀疏数组
    遍历数组,如果某个值不为零,则将其放置在对应的结构体中
    val := valNode{
        原来数组的行和列以及值
        row:   110初始化存储稀疏数组
    sparseArr = append(sparseArr,val)

    for i,1)">for j,1)"> range v1 {
            if v2 !=  {
                 val valNode
                val.row = i
                val.col = j
                val.value = v2
                sparseArr = range sparseArr {
        fmt.Printf(第%d行,第%d列的值是%d\n",j.row,j.col,j.value.())

    }
     sparseArr
}

func writeParseArr(sparseArr []valNode,filepath string将稀疏数组存储
    file,err := os.OpenFile(filepath,os.O_CREATE|os.O_APPEND|os.O_WRONLY,0666)
    if err != nil {
        
    }
    defer file.Close()
     range sparseArr {
        因为读取到的整型,需要转为字符串再进行写入
        将接口赋值给一个变量需要进行类型断言
        str := strconv.Itoa(j.row) + " " + strconv.Itoa(j.col) + " + strconv.Itoa((j.value.(int))) + \n
        wriiter := bufio.NewWriter(file)
        wriiter.WriteString(str)
        wriiter.Flush()
         fmt.Printf("第%d行,第%d列的值是%d\n",j.value.(int))

    }
}

func readParseArr(filepath string) (newChessMap [初始化数组
    读取存储的文件,并将每行转成
    file,os.O_RDONLY,1)">
    }
    defer file.Close()
    reader := bufio.NewReader(file)
    for {
        str,err := reader.ReadString('')
         nil {
            
        }
        tmp := strings.Split(strings.TrimRight(str,1)">"),1)"> fmt.Println(strings.Split(strings.TrimRight(str,"\n")," "))
        r,_ := strconv.Atoi(tmp[])
        c,_ := strconv.Atoi(tmp[])
        v,1)">2])
        if r ==  {
            continue
        }
        newChessMap[r][c] = v
        if err == io.EOF {
            break
        }
    }
     newChessMap
}

func main() {
    chessMap := originArr()
    printArr(chessMap)
    sparseArr := doParseArr(chessMap)
    filepath := data.txt
    writeParseArr(sparseArr,filepath)
    newChessMap := readParseArr(filepath)
    printArr(newChessMap)
}

 

 data.txt

 

 

相关文章

Golang的文档和社区资源:为什么它可以帮助开发人员快速上手...
Golang:AI 开发者的实用工具
Golang的标准库:为什么它可以大幅度提高开发效率?
Golang的部署和运维:如何将应用程序部署到生产环境中?
高性能AI开发:Golang的优势所在
本篇文章和大家了解一下go语言开发优雅得关闭协程的方法。有...