Golang程序 将列表转换为Map
在本教程中,我们将编写一个Golang程序,将一个列表转换为Map。链接列表是一个动态创建的结构,它有两个元素,一个用来存储值,另一个用来存储下一个结构的地址。Map以键:值对的形式存储元素。 Map 是一个没有分类的、灵活的集合,禁止重复。
将列表转换为Map
在这篇文章中,我们将讨论如何将一个链接列表转换为Map。下面的程序说明了这个转换过程。
语法
func make([]type, length, capacity) []type
make函数是用来制作一个分片或Map的。它需要三个参数,一个是我们希望制作的分片名称和类型,其次是分片的长度和容量。然后,该函数返回最终的分片。
算法
第1步 - 首先,我们需要导入fmt包。
第2步 – 下一步是创建一个节点。为此,我们要定义一个新的结构,叫做节点。
第3步 - 然后我们需要创建一个linkedlist结构。它也有两个字段,一个是名为head的指针变量。这个变量指向头部节点
第4步 - 然后我们初始化了两个函数,一个是initlist()函数。这个函数被定义在linkedlist结构上,并返回linkedlist{}的地址。
第5步 --创建第二个函数,命名为prepend,用于向linkedlist添加一个新的节点元素,并接受一个节点作为参数。
第6步 - 一旦数据被添加到链接列表的当前节点,我们需要使链接列表的下一个指针指向下一个节点并增加链接列表的长度。
第7步 - 启动主函数,通过调用initlist()函数创建一个新的链表,名为mylist。
第8步 - 之后,我们创建了几个节点,并向它们存储了字符串值。
第9步–下一步是将这些节点排列在一起,形成一个链表,为此我们调用pepend()函数,将每个节点作为参数传递给该函数。
第10步 - 然后我们需要创建一个Map。我们将其命名为newmap,它以int和string格式的键值对存储数据。
第11步 – 下一步是在链表上进行迭代,在每次迭代中,我们从链表中提取键和数据并将其存储在集合中。
第12步 - 然后我们需要使链表的指针变量指向下一个节点,并重复这个过程,直到我们得到nil或null值。
第13步 – 下一步是使用fmt.Println()函数在屏幕上打印Map。
例子
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语言程序,将一个链接列表转换为Map,并附有实例。