Golang 将列表转换为映射
在本教程中,我们将编写一个Golang程序来将列表转换为映射。链表是一种动态创建的结构,它有两个元素,一个用来存储值,另一个用来存储下一个结构的地址。映射以键值对的形式存储元素。映射是一个无序的、灵活的集合,不允许重复。
将列表转换为映射
在本文中,我们将讨论将链表转换为映射的过程。以下程序说明了这个转换过程。
语法
func make([]type, length, capacity) []type
make函数用于创建切片或映射。它接受三个参数,第一个是我们希望创建的切片名称和类型,后面是切片的长度和容量。然后函数返回最终的切片。
步骤
步骤1 - 首先,我们需要导入fmt包。
步骤2 - 接下来,我们需要创建一个节点。为此,我们定义一个名为node的新结构。
步骤3 - 然后,我们需要创建一个链表结构。它也有两个字段,一个是名为head的指针变量,它指向头节点。
步骤4 - 接下来,我们初始化了两个函数,其中一个是initlist()函数。该函数在链表结构上定义,返回链表{}的地址。
步骤5 - 创建一个名为prepend的第二个函数,用于向链表中添加一个新的节点元素,并使用节点作为参数。
步骤6 - 一旦数据添加到链表的当前节点中,我们需要将链表的下一个指针指向下一个节点,并增加链表的长度。
步骤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语言程序,将链表转换为映射,并附带示例。