【发布时间】:2019-03-10 08:32:03
【问题描述】:
我从未使用过 C/C++,所以我对 go 中的指针有点卡住了。问题是:每个“房间”都有一个map[string][]InteractiveItems,我想在一个函数中更改它的一部分。这里是:
func (r *room) getItem(arg string) InteractiveItem {
for i, val := range r.interactiveItems {
for _, item := range val {
if item.getName() == arg {
var idxToDelete int
for idx := range val {
if val[idx].getName() == arg {
idxToDelete = idx
break
}
if len(val) == 0 {
delete(r.interactiveItems, i)
}
}
val = append(val[:idxToDelete], val[idxToDelete+1:]...)
return item
}
}
}
return nil
显然,val 在函数内部发生了变化,但房间的地图没有变化。我应该如何处理删除切片元素的指针?
【问题讨论】:
-
将追加的结果设置到要在地图内更改的切片,即。
r.interactiveItems[i] = append(val[:idxToDelete], val[idxToDelete+1:]...). -
@mkopriva 谢谢!写一个答案,我标记一下
标签: function pointers go slice