iT邦幫忙

0

Golang map[string]interface操作

我有一個slice

var data = []string{"test1", "test2", "test3", .....}

這個陣列是活的,不是寫死的
現在要建立一個map[string]interface{}

        for _, name := range data {
			datalist = append(datalist, map[string]interface{}{
				name: true,
			})
		}

印出datalist會得到

[map[test1:true] map[test2:true] map[test3:true] .....]

但因為我程式需求,需要得到

[map[test1:true test2:true test3:true .....]]

之前寫都是欄位固定的
但現在欄位不固定...

請問網上的手們,應該怎麼改比較好?

更新補充:

package main

import "fmt"

func main() {
	datalist := make([]map[string]interface{}, 0)

	var data = []string{"test1", "test2", "test3"}
	
	for _, name := range data {
		datalist = append(datalist, map[string]interface{}{
			name:true,
		})
	}
	
	fmt.Println(datalist)
}

如上程式
我對於map interface的操作沒那麼熟
不知道有沒有人可以提點一下
/images/emoticon/emoticon41.gif

更新補充:解決方法
搞半天
經由powerc提醒,總算找到方法

package main

import "fmt"

func main() {
	datalist := make(map[string]bool, 0)

	data := []string{"test1", "test2", "test3"}
	
	for _, name := range data {
		datalist[name] = true
	}
	
	fmt.Println(datalist)
}

印出:

map[test1:true test2:true test3:true]

1 個回答

0
powerc
iT邦新手 5 級 ‧ 2020-07-01 16:04:25

***先聲明我是個完全不懂golang的人
只是透過上網查一查,自己改了一下,達成你要的結果***

package main

import "fmt"

func main() {
	var data = []string{"test1", "test2", "test3"}
    //建立這個叫做map的array(?)
	datalist := []map[string]interface{}{} 
    //先塞入一個element
	datalist = append(datalist, map[string]interface{}{})

	for _, name := range data {
        //這邊應該要做確認Key是否存在?
        //否則會update掉???
		datalist[0][name] = true
	}

	fmt.Println(datalist)
}

golang很多觀念我不懂,只是湊出了要的結果
不過我目前還沒有要深入研究的打算...

看更多先前的回應...收起先前的回應...

應該是切片slice 不是陣列 一時搞錯名詞==

powerc iT邦新手 5 級 ‧ 2020-07-01 16:16:24 檢舉

了解!!/images/emoticon/emoticon33.gif

不過還是謝謝你
給了我一些方向
我用你的方向研究看看

希望有人可以再多給我一些方向

看不太懂問題 你的問題是如何在 interface 增加新的鍵值嗎
還有你的 demo 是 hello world

listennn08
不知道為什麼
那個demo好像只有我能看到
已經改貼程式碼了

另外解決方法也有了~
還是謝謝你想為我解答的心意~
/images/emoticon/emoticon41.gif

問題還真的是這樣 XD

我要發表回答

立即登入回答