go - 如何读取数组或切片的子集
问题描述
在 Go 中,我现在可以读取一个 excel 文件并将其放入一个切片中。
我也知道如何读取特定单元格的值。
但我现在想读取初始切片的一个子集,所以基本上只读取第 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)
}
解决方案
我认为这里的关键是停止将其视为行和列;在您的代码中,您正在对切片进行操作。您可以对外部级别进行切片以获取所需的行,然后对其进行迭代以从每一行中获取所需的列。但是,如果您只使用切片,那么您未使用的所有数据仍将作为支持切片的数组的一部分保存在内存中。为了提高内存效率,您可能希望将所需数据复制到具有新后备数组的全新切片中:
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
推荐阅读
- .net - 为什么我们的解决方案/项目 quickbuild、msbuild、vs-build 配置了多个构建系统?
- typescript - VSCode 扩展:获取文件的新旧版本
- javascript - React:从 url 中提取主机名
- html - html css创建背景链接
- ruby-on-rails - Rails 仅将模型嵌套关联中的某些字段呈现为 json
- ubuntu - 如何在没有 pv 的情况下获取 gunzip 的进度条(例如,tar 中的 --checkpoint)
- python - ValueError: x 和 y 必须具有相同的第一个维度,但具有形状 (99955,) 和 (15000,)
- reactjs - React-Leaflet 正在创建两个地图
- javascript - heroku 在获取/发布请求时记录 --tail 错误状态 404
- javascript - Hololens 上的 Web 应用程序(视频聊天)