我有数据结构:type PosList []inttype InvertedIndex struct { Capacity int Len int IndexList []PosList}我有添加方法的问题:func (ii *InvertedIndex) Add(posList PosList, docId int) { if ii.Len == ii.Capacity { newIndexList := make([]PosList, ii.Len, (ii.Capacity+1)*2) for i := 0; i < ii.Len; i++ { newIndexList[i] = make([]int, len(ii.IndexList[i])) copy(newIndexList[i], ii.IndexList[i]) } ii.IndexList = newIndexList } ii.IndexList = ii.IndexList[0 : ii.Len+2] ii.IndexList[docId] = posList return}或者,我尝试这样的事情:func (ii *InvertedIndex) Add(posList PosList, docId int) { if ii.Len == ii.Capacity { newIndexList := make([]PosList, ii.Len, (ii.Capacity+1)*2) copy(newIndexList, ii.IndexList) ii.IndexList = newIndexList } ii.IndexList = ii.IndexList[0 : ii.Len+2] ii.IndexList[docId] = posList return}它们都不起作用,可能有人可以解释我如何将切片附加到这样的结构中。
2 回答
UYOU
TA贡献1878条经验 获得超4个赞
我不确定我是否完全理解你在做什么,但是这样的事情应该可以正常工作,用slicea替换map:
type PosList []int
type InvertedIndex struct {
Len int
IndexList map[int]PosList
}
func (ii *InvertedIndex) Add(posList PosList, docId int) {
if ii.IndexList == nil {
ii.IndexList = make(map[int]PosList)
}
if _, ok := ii.IndexList[docId]; ok {
ii.IndexList[docId] = append(ii.IndexList[docId], posList...)
} else {
ii.IndexList[docId] = posList
}
ii.Len = len(ii.IndexList)
}
- 2 回答
- 0 关注
- 161 浏览
添加回答
举报
0/150
提交
取消