gpt4 book ai didi

arrays - 不能在赋值中使用 make([]Entry, 0, 100) (type []Entry) 作为类型 Map

转载 作者:行者123 更新时间:2023-12-01 22:44:23 26 4
gpt4 key购买 nike

尝试使用以下代码实现 go map:

package gomap

type Entry struct {
stockName string
stockValue float64
}

type Bucket []Entry

type Map [4]Bucket

type bucketElementPosition [4]int

var emptyPosition = bucketElementPosition{0, 0, 0, 0}

func Newmap() Map {

return Map{} // [(nil,0,0), (nil,0,0), (nil,0,0), (nil,0,0)]
}

func Insert(m []Map, key string, value float64) { // m is sliceofslices type

bucketNumber := (key[0] - 'A') / 7

if cap(m[bucketNumber]) == 0 { // first insert, so create the backing array
m[bucketNumber] = make([]Entry, 0, 100)
}
}
package main

import (
"fmt"

"github.com/myhub/cs61a/gomap"
)

func main() {

var stockData = gomap.Newmap()
gomap.Insert(stockData[:], "AAPL", 94.56)

}
m[bucketNumber] = make([]Entry, 0, 100)给出错误:
     cannot use make([]Entry, 0, 100) (type []Entry) as type Map in assignment

如何传递 stockData 的 slice 头至 Insert()功能?

最佳答案

使用指向 Map 的指针
m[]Map 类型, 所以 m[bucketNumber]将是 Map 类型,而不是 bucket .

更改 m 的类型至*Map并在使用时取消引用:

func Insert(m *Map, key string, value float64) { // m is sliceofslices type
bucketNumber := (key[0] - 'A') / 7

if cap((*m)[bucketNumber]) == 0 { // first insert, so create the backing array
(*m)[bucketNumber] = make([]Entry, 0, 100)
}
}

并通过 stockData的地址:
gomap.Insert(&stockData, "AAPL", 94.56)

请注意,Go 中的数组是次要的。如果您使用 slice 而不是数组(和指向数组的指针),那么代码会更简单并且可能更有效。

导出 bucket并使用 []Bucket
如果可以导出 bucket ,那么您可以更改 m 的类型至 []Bucket :
func Insert(m []Bucket, key string, value float64) { // m is sliceofslices type
bucketNumber := (key[0] - 'A') / 7

if cap(m[bucketNumber]) == 0 { // first insert, so create the backing array
m[bucketNumber] = make([]Entry, 0, 100)
}
}

并称它为:
Insert(stockData[:], "AAPL", 94.56)

关于arrays - 不能在赋值中使用 make([]Entry, 0, 100) (type []Entry) 作为类型 Map,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61185364/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com