1 回答
TA貢獻1833條經驗 獲得超4個贊
坦克的評論,有2個可能的答案:
定義
pairs為var pairs Pairs哪個在定義Pairs而不是pairs := new(Pairs)哪個在定義*Pairspairs賦值兩邊的取消引用為:*pairs = append(*pairs, Pair{k, v})
所以現在對我來說完整的工作代碼是:
package main
import "fmt"
type Inventory struct { //instead of: map[string]map[string]Pairs
Warehouse string
Item string
Batches Pairs
}
type Pairs []Pair
type Pair struct {
Key string
Value float64
}
func main() {
fmt.Println("Hello, 世界")
var inventory = Inventory{} // or: new(Inventory) noth are working //warehouse[item[batch, qty]]
inventory.Warehouse = "DMM"
inventory.Item = "Helmet"
inventory.Batches = append(inventory.Batches, Pair{"Jan", 10})
inventory.Batches = append(inventory.Batches, Pair{"Jan", 30})
inventory.Batches = append(inventory.Batches, Pair{"Feb", 30})
fmt.Printf("%v\n", inventory)
result := inventory.Batches.group()
fmt.Printf("%v %T\n", result, result)
}
func (p *Pairs) group() Pairs {
sum := make(map[string]float64)
pairs := new(Pairs)
// var pairs Pairs
for _, el := range *p {
sum[el.Key] = sum[el.Key] + el.Value
}
for k, v := range sum {
*pairs = append(*pairs, Pair{k, v}) // with pairs := new(Pairs)
// pairs = append(pairs, Pair{k, v}) // var pairs Pairs
}
return *pairs
}
輸出是:
Hello, 世界
{DMM Helmet [{Jan 10} {Jan 30} {Feb 30}]}
[{Jan 40} {Feb 30}] main.Pairs
Program exited.
- 1 回答
- 0 關注
- 172 瀏覽
添加回答
舉報
