go - 处理零切片索引的更好方法
问题描述
我已经开始了一个使用 excel 数据和各种 Go excel 库(excelize、tealeg 的 xlsx)创建报告的项目
我发现的最大挫折之一是使用根据数据源具有一些 nil 索引的切片(当我使用 xlsx 库提取数据时,输入数据传输中的空白行作为“nil”切片索引)
如果我尝试在我的许多 for 循环之一中使用它们,这些 nil 切片索引显然会抛出一个“超出范围的索引”——这导致我完成一项艰巨的任务,即确保每次我想要使用的切片索引是't 实际上 nil 通过使用 len() 和 cap to death()(下面的代码摘录来说明)
//example code excerpt
for rowNumber, cellStringSlice := range inputSlice {
for rowColumn, cellString := range cellStringSlice {
//loop var declaration
rowColumnHeading := 2
rowNumberInc := rowNumber + 1
rowNumberDec := rowNumber - 1
if rowNumber > 0 {
if len(inputSlice[rowNumber]) != 0 { //len check to stop index out of range issue with slice
previousColACellValue = inputSlice[rowNumber][rowColumn]
continue
}
if len(inputSlice[rowNumber+1]) != 0 { //len check to stop index out of range issue with slice
nextColACellValue = inputSlice[rowNumber+1][rowColumn]
continue
}
}
}
我应该指定在这个 2D 切片中我正在使用:
inputSlice[rowNumber][rowColumn]
近端切片(rowNumber)从不为零(总是有一行)但是它索引的第二个远端切片(rowColumn)在某些情况下可以为 nil - 这就是为什么在这种情况下我的整个循环总是进入第二个内部循环,即使当它正在迭代没有列数据的行(即 inputSlice[rowNumber][rowColumn] = nil),并且经常需要我处理索引超出范围的问题
我不能只删除所有 nil 索引并将所有内容向上移动,因为这些在我将这些行输出到的最终 excel 文档中代表“空白行”。
所以我的问题是,是否有任何有用的 go 函数或库通过将所有 nil 交换为切片和字符串类型的 2d/3d 切片中的 "" 来处理 nil 索引?或者程序员的任务是通过删除这些 nil 来“清理”他的切片,或者每次他们想要访问一个元素时检查它们?
我很感激我可以自己编写一个 for 循环来将所有这些 nil 替换为“”,但是每次我使用包含/可能包含 nil 的字符串切片时编写一个函数来执行此操作对我来说似乎有点奇怪
解决方案
您的外循环是 on inputSlice
,因此inputSlice[rowNumber]
始终有效,并且由于内循环在该行上,因此它永远不会为零。因此第一次检查是不必要的。如果您有一个 nil 或空切片 for inputSlice[rowNumber]
,则甚至不会进入内部 for 循环。
第二次检查是必要的,但错误:
if len(inputSlice[rowNumber+1]) != 0 {
如果rowNumber
是最后一行,则inputSlice[rowNumber+1]
无效,因为不存在这样的行。你必须检查:
if rowNumber<len(inputSlice) {
...
}
推荐阅读
- python - Pandas:在第一列值中读取带有 NaN 的数据
- python - 为什么熊猫 SettingWithCopyWarning 没有给出导致错误的确切位置?
- php - 需要一些帮助来解析字符串中的数据
- python - 如何通过计算我的 pandas 数据框中的值来创建一个新系列?
- android - 获取带有图片链接的 Wordpress 帖子
- python - 克隆 3d numpy 数组中的列
- matlab - 如何在 Matlab 中以更好的方式实现 Box 函数?
- python - 在python中合并来自两个不同列表的DF
- multithreading - 如果我为它创建一个专用代理,我可以从多个线程中写入一个 sqlite 数据库吗
- python - Python - 如何将重复的过程置于循环中?