Arrays 如何使用go在没有索引名的hashmap中存储值?
我想在hashmap中存储一些没有索引名的值。我的意思是从数组和hashmap派生的 例如:Arrays 如何使用go在没有索引名的hashmap中存储值?,arrays,dictionary,go,hashmap,slice,Arrays,Dictionary,Go,Hashmap,Slice,我想在hashmap中存储一些没有索引名的值。我的意思是从数组和hashmap派生的 例如: {"name":"attn",1,5,6,7,8} 变量输出(仅用于演示): 或者另一个例子: { 0:"start","name":"mattn","age":39,"child":[1,2,3,4,5,9:1] } m = map[interface{}]interface{}{ 0: "start", "name": "mattn", "age": 39, "child": [
{"name":"attn",1,5,6,7,8}
变量输出(仅用于演示):
或者另一个例子:
{ 0:"start","name":"mattn","age":39,"child":[1,2,3,4,5,9:1] }
m = map[interface{}]interface{}{
0: "start", "name": "mattn", "age": 39,
"child": []int{1: 1, 2, 3, 4, 5, 9: 1},
}
fmt.Println(m)
如何在围棋中做到这一点?
也许我需要新的数据类型?:)
请帮帮我!谢谢大家! 您可以这样做:
package main
import "fmt"
func main() {
dynMap := map[interface{}]interface{}{
"name": "attn",
0: 1,
1: 5,
2: 6,
3: 7,
4: 8,
}
fmt.Printf("%v\n", dynMap)
dynMap2 := map[interface{}]interface{}{
0: "start",
"name": "mattn",
"age": 39,
"child": []int{1, 2, 3, 4, 5, 9:1},
}
fmt.Printf("%v\n", dynMap2)
}
除了“孩子”:[1,2,3,4,5,9:1]-我不明白你到底想要什么[9:1]谢谢你的纠正:这也是可行的
尽管我也喜欢python,但go不是python(或js/ruby/etc)。如果你愿意做很多事情,并对其进行反思——这是可能的,但这很痛苦。
该键被解释为结构文字的字段名、数组和切片文字的索引以及映射文字的键对于映射文字,所有元素都必须有一个键。使用相同的字段名或常量键值指定多个元素是错误的
因此,不,使用复合文字来初始化映射
,我们不能忽略键
在使用切片文字时,我们可能(通常也会)忽略索引。因此,我们可以在一个映射文本中列出键值对(我们知道或想要显式地声明键),并在另一个切片文本中列出具有后续索引的元素以初始化切片。然后,我们可以迭代切片并基于索引值对添加键值对
您的第一个示例:
m := map[interface{}]interface{}{
"name": "attn",
}
s := []int{1, 5, 6, 7, 8}
for i, v := range s {
m[i] = v
}
fmt.Println(m)
输出:
map[0:1 1:5 2:6 3:7 4:8 name:attn]
map[0:start name:mattn age:39 child:[0 1 2 3 4 5 0 0 0 1]]
你的另一个例子是:
{ 0:"start","name":"mattn","age":39,"child":[1,2,3,4,5,9:1] }
m = map[interface{}]interface{}{
0: "start", "name": "mattn", "age": 39,
"child": []int{1: 1, 2, 3, 4, 5, 9: 1},
}
fmt.Println(m)
输出:
map[0:1 1:5 2:6 3:7 4:8 name:attn]
map[0:start name:mattn age:39 child:[0 1 2 3 4 5 0 0 0 1]]
试穿这些衣服
注意,在第二个示例中,“child”
的值是一个包含0
元素的片。这是因为切片或数组是连续的,即使我们没有为所有索引提供元素,仍然会有元素用于缺少的索引。如果我们不想要它,那不是一个切片(或数组),而是一个映射
,我们可以像第一个示例中所示初始化它
我们无法区分隐式0
和显式0
(我们可以在复合文字中列出)。如果0
是我们可以使用的值,另一种选择是将child
的类型定义为[]接口{}
,如果我们没有在复合文本中明确指定值,则它将是nil
有关初始化数组和切片的更多示例,请参见此问题:我认为在Go中无法执行类似操作。Go力求明确,因此您必须始终在地图中提供键。这篇文章非常含糊不清。你的代码不是围棋代码。阅读有关严格类型语言的内容,因为Go不是Python。。。甚至都不接近……为什么会差?这是一个典型的来自动态类型语言的新手问题。除了“child”:[1,2,3,4,5,9:1]-在goI中一切都是可行的,我认为
9:1
意味着切片的第九个元素应该是1
。有趣。我不知道。9:1
=>9是名字索引。把你从所有人中抽出来。