首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何读取数组或片的子集

如何读取数组或片的子集
EN

Stack Overflow用户
提问于 2018-07-17 16:16:31
回答 1查看 1K关注 0票数 0

在Go中,我现在可以读取excel文件并将其放入片中。

我还知道如何读取特定单元格的值。

但是现在我想读取初始切片的一个子集,因此基本上只读取第10行到第15行和第23至25列。

下面的代码没有这样做,它读取第35行和第36行以及所有列。如何将第23至25列仅读到df2中?

代码语言:javascript
复制
package main

import (
    "fmt"

    "github.com/360EntSecGroup-Skylar/excelize"
)

func main() {
    xlsx, err := excelize.OpenFile("/media/Snaps/test.xlsm")
    if err != nil {
        fmt.Println(err)
        return
    }

    rows := xlsx.GetRows("ticker")

    df2 := rows[10:15][23:25]
    fmt.Println(df2)
}
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-07-17 17:26:31

我认为这里的关键是停止将其视为行和列;在您的代码中,您正在对片进行操作。您可以对外部级别进行切片以获取所需的行,然后迭代这些行以从每一行中获取所需的列。但是,如果只取切片,则所有未使用的数据仍将作为支持片的数组的一部分保存在内存中。为了提高内存效率,您可能希望将所需的数据复制到具有新支持数组的全新切片中:

代码语言:javascript
复制
    rows := xlsx.GetRows("ticker")

    df2 := make([][]string, 5) // I don't know what data type the cells are, assuming string, adjust the number to the number of rows you want to avoid unnecessary allocations)
    idx := 0
    for _, row := range rows[10:15] { // iterate over desired rows
        df2row := make([]string, 2) // again, assuming 2 columns of string cells, adjust as needed
        copy(df2row, row[23:25]) // copy desired columns to new row slice
        df2[idx] = df2row
        idx++
    }

    fmt.Println(df2)

这里有一个非常好的、详细的切片操作示例:https://blog.golang.org/go-slices-usage-and-internals

下面是一个带有生成的虚拟数据的可运行游乐场示例:https://play.golang.org/p/wRKcTpnTUA2

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/51386048

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档