我有數據結構: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 關注
- 199 瀏覽
添加回答
舉報
0/150
提交
取消