- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我编写了以下代码以进行 slice 复制,并且工作正常,并且不影响作为参数传递给函数的主 slice :
package main
import "fmt"
type Team []Person
type Person struct {
Name string
Age int
}
func main() {
team := Team{
Person{"Hasan", 34}, Person{"Karam", 32},
}
fmt.Printf("original before clonning: %v\n", team)
team_cloned := team.Clone()
fmt.Printf("original after clonning: %v\n", team)
fmt.Printf("clones slice: %v\n", team_cloned)
}
func (c *Team) Clone() Team {
var s = make(Team, len(*c))
copy(s, *c)
for index, _ := range s {
s[index].Name = "change name"
}
return s
}
clone
从它传递给函数,原始 slice 也会发生变化:
type Inventories []Inventory
type Inventory struct { //instead of: map[string]map[string]Pairs
Warehouse string
Item string
Batches Lots
}
type Lots []Lot
type Lot struct {
Date time.Time
Key string
Value float64
}
func (c *Inventories) Clone() Inventories {
var s = make(Inventories, len(*c))
copy(s, *c)
return s
}
func (outs Inventories) BuildBatchesFrom(ins Inventories) (batchesBalance Inventories, outgoing Inventories) {
batchesOut := Inventories{}
for _, in := range batchesBalance {
for _, out := range outgoing {
if out.Warehouse == in.Warehouse && out.Item == in.Item {
batches := Lots{}
OUTER:
for {
oldestBatch := in.Batches.First()
batchQty := math.Min(in.Batches.First().Value, math.Abs(out.Batches.First().Value))
batches = append(batches, Lot{out.Batches.First().Date, oldestBatch.Key, batchQty})
out.Batches[0].Value = out.Batches.First().Value + batchQty
in.Batches[0].Value = oldestBatch.Value - batchQty
if in.Batches.First().Value == 0 {
in.Batches.PopFirst()
}
if out.Batches.First().Value == 0 {
out.Batches.PopFirst()
if len(out.Batches) == 0 {
break
} else {
continue OUTER
}
} else {
continue OUTER
}
}
batchesOut = append(batchesOut, Inventory{
Warehouse: out.Warehouse,
Item: out.Item,
Batches: batches,
})
}
}
//os.Exit(3)
}
return batchesOut, batchesBalance
}
func main() {
ins := Inventory{
Warehouse: "DMM",
Item: "Gloves",
Batches: Lots{
Lot{mustTime(time.Parse(custom, "1/7/2020")), "Jan", 50},
Lot{mustTime(time.Parse(custom, "2/1/2020")), "Feb", 70},
},
}
outs := Inventory{
Warehouse: "DMM",
Item: "Gloves",
Batches: Lots{
Lot{mustTime(time.Parse(custom, "1/5/2020")), "", -10},
Lot{mustTime(time.Parse(custom, "2/9/2020")), "", -30},
},
}
fmt.Printf("\n\n[1] Ins: \n%v", ins) // This output is different after running outs_clone.BuildBatchesFrom(ins_clone)
fmt.Printf("\n\n[2] Outs: \n%v", outs) // // This output is different after running outs_clone.BuildBatchesFrom(ins_clone)
ins_clone := ins.Clone()
outs_clone := outs.Clone()
batchesOut, batchesBalance := outs_clone.BuildBatchesFrom(ins_clone)
fmt.Printf("\n\n[1] Ins: \n%v", ins) // This output is different before running outs_clone.BuildBatchesFrom(ins_clone)
fmt.Printf("\n\n[2] Outs: \n%v", outs) // This output is different after running outs_clone.BuildBatchesFrom(ins_clone)
fmt.Printf("\n\n[4] Batches outs: \n%v", batchesOut)
fmt.Printf("\n\n[5] Batches Balances: \n%v", batchesBalance)
}
ins
在运行函数后发生了变化,尽管我没有在那儿传递它,并且
ins_clone()
在函数后发生了变化,尽管我在函数代码的第一行中对其进行了克隆,
outs
和
outs_clone()
相同
最佳答案
我明白了,原因是我的 slice 包含一个sub slice
,所以copy
适用于顶部的一个,但不适用于共享相同数据的下一个,我通过创建一个新的 slice 来重写代码来修复它,将数据推送到其中,然后使用它替换原来的数据,如下所示:
func (i *Inventories) CloneFrom(c Inventories) {
inv := new(Inventories)
for _, v := range c {
batches := Lots{}
for _, b := range v.Batches {
batches = append(batches, Lot{
Date: b.Date,
Key: b.Key,
Value: b.Value,
})
}
*inv = append(*inv, Inventory{
Warehouse: v.Warehouse,
Item: v.Item,
Batches: batches,
})
}
(*i).ReplaceBy(inv)
}
func (i *Inventories) ReplaceBy(x *Inventories) {
*i = *x
}
关于go - 在复制 slice 并使用副本后更改 slice ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62222991/
不确定我的标题措辞是否正确,但请耐心等待,所有内容都会得到解释... 我们有一组代码不是在这里发明的,它使用进程间通信(IPC 消息传递)。该方案的大致轮廓是这样的: comms.c 包含: stat
你怎么能列出所有的颠覆合并? 例如: Trunk ____9_____14____20___ \ \ \ \______\_____\___
是否有一个集合的标准 Java(1.5+)实现(即无第三方),允许我将多个集合粘合到一个集合中? 这是其工作原理的草图: final SomeCollection x = new SomeCollec
有没有办法让sql查询返回拆分行。我什至不知道怎么问。下面有'index_tag'。 select event.name, tb_ev.start_time, tb_ev.end_time from
我正在尝试使用 postgresql COPY 命令从 CSV 加载一些数据。诀窍是我想在用户标识(包含在 CSV 中)上实现 Multi-Tenancy 。加载 csv 时,是否有一种简单的方法告诉
我正在尝试使用 bash 脚本将文件复制到当前目录。 为了处理需要转义的路径,使用了一个变量,该变量被转义然后提供给 cp 命令。 cp 命令提示: usage: cp [-R [-H | -L |
我正在尝试每 20 毫秒向给定的 x 和 y 坐标添加一次 CAShapelayer。我希望形状在一秒钟内消失(就像示踪剂一样)。我创建的功能有效,形状在正确的位置创建并消失。但是我留下了额外的形状,
我是 Python 新手。我正在尝试创建一个程序来打印我通常每周手动打印的一组文档,但是我遇到了几个问题: 这是代码: import os file_list = os.listdir("C:/Pyt
我有一个大小为 10 的 ArrayList l1。我将 l1 分配给新的列表引用类型 l2。 l1 和 l2 会指向同一个 ArrayList 对象吗?或者是 ArrayList 对象的副本分配给
我这周花了一个自由职业者创建的 Mongo 4.4 PSA 副本来工作。我放弃了,从所有三台服务器上删除了完整的 mongod,然后按照 Mongo doc 从头开始安装。 .唯一的变化是在副本初
设置信息: 我有两个数据中心,每个 DC 中有 5 个节点。 我知道插入到表中的每一行都是根据使用的数据分区方案存储的;生成必要的副本并将它们存储在集群中的其他节点(根据复制策略选择节点)上。给定一行
我对 XSLT 完全陌生,所以请耐心等待。 我有两个 xml 文件,我试图使用 XSLT 将它们连接在一起。我想合并这些文件,以便第二个文件中指定的任何值覆盖第一个文件。例如 firstFile.xm
这里肯定有一个初学者问题,为什么 F# 编译器会制作不必要的 DateTimeOffset 副本,我该如何阻止它?我不记得这是个问题,但也许自从我在 F# 中使用 DateTimeOffset 以来已
我有一个用 C# 编写的 WinForms 应用程序,在将数据从 SQL 数据库导出到模板的工作表之前,它使用以下代码打开 Excel 模板。 Microsoft.Office.Interop.Exc
我从这个 post 得到的 xsl 中有这个函数 用“换行符”替换“cr” 我是这样调用它的: 我正在做文章链接,点击文本“阅读更多”
所以这可能有点难以解释...... 目前我这样做: SomeInterface xyz1 = SomeInterface.method(data); SomeInterfaceCopy xyz2 =
我有一个包含指针 p 的类型 var。我需要在另一个与 var 类型相同的变量 var1 上复制 var(通过在引号中执行 var1 "="var,因为我不知道这是否是正确的方法,请参见下文)。 在我
出于某种原因,我需要同时运行两个 xampp 副本。我在互联网上阅读了很多教程,但如果我需要运行另一个,他们最终会告诉我关闭当前的 xampp。这有可能实现吗? 最佳答案 您可以使用不同的端口同时运行
在aws中,“upload-part-copy”具有字节范围选项。如果我想将两个对象的一部分复制到云中的新对象,我可以使用“upload-part-copy”命令进行复制。 我找不到任何此类方法或机制
我有一个带栏的表 foo foo --- bar 我使用 Postgres 的 Copy 命令 COPY (select * from foo) TO 'complete_file_path' WIT
我是一名优秀的程序员,十分优秀!