将列表转换为映射的 Golang 程序
在本教程中,我们将编写一个 golang 程序将列表转换为映射。链接列表是一种动态创建的结构,它有两个元素,一个用于存储值,另一个用于存储下一个结构的地址。映射将元素存储在键:值对中。map是一个未排序的灵活集合,禁止重复。
将列表转换为映射
在本文中,我们将讨论将链接列表转换为映射。以下程序说明了此转换过程。
语法
func make([]type, length, capacity) []type
make 函数用于创建切片或映射。它需要三个参数,一个是我们希望创建的切片名称和类型,其次是切片的长度和容量。然后,该函数返回最终的切片。
算法
步骤 1 − 首先,我们需要导入 fmt 包。
步骤 2 − 下一步是创建一个节点。为此,我们定义了一个名为 node 的新结构。
步骤 3 − 然后我们需要创建一个 linkedlist 结构。它也有两个字段,一个是名为 head 的指针变量。这个变量指向头节点
步骤 4 − 然后我们初始化了两个函数,一个是 initlist() 函数。此函数在 linkedlist 结构上定义,并返回 linkedlist{} 的地址。
步骤 5 − 创建第二个函数,命名为 prepend,用于将新节点元素添加到链接列表,并以节点作为参数。
步骤 6 − 将数据添加到链接列表的当前节点后,我们需要使链接列表的下一个指针指向下一个节点并增加链接列表的长度。
步骤 7 − 启动主函数并通过调用 initlist() 函数创建一个名为 mylist 的新链接列表。
步骤 8 − 之后,我们创建了几个节点并将字符串值存储到它们中。
步骤 9 - 下一步是将这些节点排列在一起以形成一个链接列表,为此我们通过将每个节点作为参数传递给函数来调用 prepend() 函数。
步骤 10 - 然后我们需要创建一个映射。我们将其命名为 newmap,它以 int 和字符串格式将数据存储在键值对中。
步骤 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{} } // 函数将新节点添加到链接列表 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("从链表获取的map为:", newmap) }
输出
从链表获取的map为:map[2:星期一 1:星期日 3:星期二]
结论
我们已经成功编译并执行了一个go语言程序,将链表转换为map,并附上示例。