Go语言程序:将列表转换为映射
在本教程中,我们将编写一个 Go 语言程序,用于将列表转换为映射。链接列表是一种动态创建的数据结构,它有两个元素,一个用于存储值,另一个用于存储下一个结构的地址。映射以键值对的形式存储元素。映射是一个无序的、灵活的集合,不允许重复。
将列表转换为映射
在本文中,我们将讨论如何将链接列表转换为映射。以下程序说明了此转换过程。
语法
func make([]type, length, capacity) []type
make 函数用于创建切片或映射。它接受三个参数,一个是我们要创建的切片名称和类型,后跟切片的长度和容量。然后,该函数返回最终的切片。
算法
步骤 1 - 首先,我们需要导入 fmt 包。
步骤 2 - 下一步是创建一个节点。为此,我们定义了一个名为 node 的新结构。
步骤 3 - 然后我们需要创建一个 linkedlist 结构体。它也有两个字段,一个是名为 head 的指针变量。此变量指向头节点
步骤 4 - 然后我们初始化了两个函数,一个是 initlist() 函数。此函数在 linkedlist 结构体上定义,并返回 linkedlist{} 的地址。
步骤 5 - 创建第二个名为 prepend 的函数,它用于向链接列表添加一个新的节点元素,并以节点作为参数。
步骤 6 - 将数据添加到链接列表的当前节点后,我们需要使链接列表的 next 指针指向下一个节点,并增加链接列表的长度。
步骤 7 - 启动 main 函数并通过调用 initlist() 函数创建一个名为 mylist 的新链接列表。
步骤 8 - 之后,我们创建了几个节点并将字符串值存储到其中。
步骤 9 - 下一步是将这些节点组合在一起以形成一个链接列表,为此,我们通过将每个节点作为参数传递给函数来调用 prepend() 函数。
步骤 10 - 然后我们需要创建一个映射。我们将其命名为 newmap,它以 int 和 string 格式以键值对的形式存储数据。
步骤 11 - 下一步是迭代链接列表,并在每次迭代中从链接列表中提取键和数据,并将其存储在集合中。
步骤 12 - 然后我们需要使链接列表的指针变量指向下一个节点,并重复此过程,直到我们得到 nil 或 null 值。
步骤 13 - 下一步是使用 fmt.Println() 函数在屏幕上打印映射。
示例
package main import ( "fmt" ) type node struct { data string key int next *node } type linkedlist struct { len int head *node } func initList() *linkedlist { return &linkedlist{} } // function to add a new node to the linked list func (l *linkedlist) prepend(n *node) { node := &node{ data: n.data, key: n.key, } if l.head == nil { l.head = node } else { node.next = l.head l.head = node } l.len++ return } func main() { mylist := initList() node1 := &node{key: 1, data: "Sunday"} node2 := &node{key: 2, data: "Monday"} node3 := &node{key: 3, data: "Tuesday"} mylist.prepend(node1) mylist.prepend(node2) mylist.prepend(node3) newmap := make(map[int]string) for mylist.head != nil { newmap[mylist.head.key] = mylist.head.data mylist.head = mylist.head.next } fmt.Println("The obtained map from linked list is:", newmap) }
输出
The obtained map from linked list is: map[2:Monday 1:Sunday 3:Tuesday]
结论
我们已成功编译并执行了一个 Go 语言程序,用于将链接列表转换为映射以及示例。