go - 如何附加到二维切片
问题描述
我有逐行创建的数据,6 列,我事先不知道最终的行数。
目前,我正在创建一个全为零的 200x6 二维切片,然后我逐渐用我的数据逐行替换这些零。数据来自另一个数据框 df
它有效,但我不喜欢我的切片的最后一行全是零。我看到了 2 个解决方案: - 完成后,我删除了所有最后只有零的行 - 我创建了一个空切片并逐步将我的数据附加到它
我尝试了各种方法,但无法弄清楚如何编写这两种解决方案中的任何一种。
目前我的代码如下所示:
var orders [200][6]float64 // create my 2d slice with zeros
order_line := 0
for i := start_line; i <= end_line; i++ {
if sell_signal == "1" {
//record line number and sold price in orders slice
orders[order_line][1] = float64(i+1)
orders[order_line][2],err = strconv.ParseFloat(df[i][11], 64)
order_line = order_line + 1
}
}
我查看了 Append 命令,但我尝试了各种组合以使其在 2d 切片上工作,但找不到有效的组合。
编辑:从下面的评论中,我了解到我实际上是在创建一个数组,而不是一个切片,并且无法将数据附加到数组中。
解决方案
在 Golang 中,切片代替数组是首选。
不需要预先创建这么多行,只需在每次循环数据时创建一个切片以在父切片中添加新行。这将帮助您只拥有所需的行数,并且您需要担心长度,因为您要在父切片的索引处附加切片。
package main
import (
"fmt"
"math/rand"
)
func main() {
orders := make([][]float64, 0) // create my 2d slice with zeros
for i := 0; i <= 6; i++ {
value := rand.Float64()
temp := make([]float64, 0)
temp = append(temp, value)
orders = append(orders, [][]float64{temp}...)
}
fmt.Println(orders)
}
如果您注意到我正在temp
循环中创建一个包含float64
值的新切片,然后将值附加到我已传递给父切片的临时切片。
所以每次我将临时切片附加到父切片时,都会创建一个新行。
笔记:
数组有它们的位置,但它们有点不灵活,所以你不会经常在 Go 代码中看到它们。然而,切片无处不在。它们建立在阵列之上,以提供强大的功能和便利性。
编辑:
处理前 3 列,然后操作接下来 3 列的值,这些值将添加到临时切片并附加到主切片。使用以下代码逻辑:
package main
import (
"fmt"
"math/rand"
"strconv"
)
func main() {
orders := make([][]float64, 0) // create my 2d slice with zeros
for i := 0; i <= 6; i++ {
value := rand.Float64()
// logic to create first 3 columns
temp := make([]float64, 0)
temp = append(temp, value)
temp2 := make([]float64, 3)
// logic to create next 3 columns on basis of previous 3 columns
for j, value := range temp {
addcounter, _ := strconv.ParseFloat("1", 64)
temp2[j] = value + addcounter
}
temp = append(temp, temp2...)
orders = append(orders, [][]float64{temp}...)
}
fmt.Println(orders)
}
工作示例
推荐阅读
- php - 将 www 更改为子域,CodeIgniter 函数仍在发送到 www,得到 302 移动错误
- http - 如何正确使用directus /auth/refresh?
- devops - OpenWhisk 身份验证问题(获取用户名和密码)
- node.js - 在生产中使用 mongoDB 和 heroku
- module - 没有名为“dearpygui.core”的模块
- javascript - 文本未在 Firefox (CSS) 中显示
- r - 如何根据相同的主题 ID 将单元格的值复制到其他行?
- office365 - Excel Office 脚本 - 以图像形式发送数据
- wso2-am - wso2 api manager 3.2.0 OAuth2Service 提供的回调 URL 与提供的一个错误不匹配?
- git - 如何从不打算受影响的受影响分支的不同分支恢复提交?