Arrays 如何使用go在没有索引名的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": [

我想在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": []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是名字索引。把你从所有人中抽出来。