2017-11-11 133 views
3

我想追加的值的映射圖的內部陣列:追加值,以陣列

var MyMap map[string]Example 

type Example struct { 
    Id []int 
    Name []string 
} 

這裏是我嘗試,但我不能指向實施例的一個目的,以追加到陣列。

package main 


import (
    "fmt" 
) 


type Example struct { 
    Id []int 
    Name []string 
} 

func (data *Example) AppendExample(id int,name string) { 
    data.Id = append(data.Id, id) 
    data.Name = append(data.Name, name) 
} 

var MyMap map[string]Example 

func main() { 
    MyMap = make(map[string]Example) 
    MyMap["key1"] = Oferty.AppendExample(1,"SomeText") 
    fmt.Println(MyMap) 
} 
+0

我以爲我解決了這個問題,但我沒有解決它,因爲我需要分配循環中的鍵匹配值。 – Saem

回答

4

你需要把它到地圖之前創建的實例結構的實例。

此外,您的映射會保留您的結構的副本,而不是根據MyMap定義的結構本身。嘗試在地圖中保留對您的示例結構的引用。

package main 

import "fmt" 

type Example struct { 
    Id []int 
    Name []string 
} 

func (data *Example) AppendOffer(id int, name string) { 
    data.Id = append(data.Id, id) 
    data.Name = append(data.Name, name) 
} 

var MyMap map[string]*Example 

func main() { 
    obj := &Example{[]int{}, []string{}} 
    obj.AppendOffer(1, "SomeText") 
    MyMap = make(map[string]*Example) 
    MyMap["key1"] = obj 
    fmt.Println(MyMap) 
} 

Pozdrawiam!

+0

是的,我做了完全一樣的事情,以及我無法找到如何做,而無需創建一個結構的對象。我會恢復我自己的答案。感謝您的輸入! – Saem

+0

不一樣。你仍然使用結構文字而不是地圖上的指針。請閱讀關於結構和指針的更多信息: https://gobyexample.com/pointers https://gobyexample.com/structs –

0

好吧,我解決了它通過創建一個示例對象,然後將值附加到其數組並將其分配給映射。

像這樣:

package main 


import (
"fmt" 
) 


type Example struct { 
    Id []int 
    Name []string 
} 

func (data *Example) AppendExample(id int,name string) { 
    data.Id = append(data.Id, id) 
    data.Name = append(data.Name, name) 
} 

var MyMap map[string]Example 

func main() { 

    var object Example 
    object.AppendExample(1,"SomeText") 

    MyMap = make(map[string]Example) 
    MyMap["key1"] = object 
    fmt.Println(MyMap) 
}