gpt4 book ai didi

go - 如何读取数组或 slice 的子集

转载 作者:数据小太阳 更新时间:2023-10-29 03:11:13 48 4
gpt4 key购买 nike

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

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

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

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

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)
}

最佳答案

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

    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)

这里有一个非常详细的 slice 操作概要:https://blog.golang.org/go-slices-usage-and-internals

这是一个带有生成的虚拟数据的可运行 Playground 示例:https://play.golang.org/p/wRKcTpnTUA2

关于go - 如何读取数组或 slice 的子集,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51386048/

48 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com