• 设为首页
  • 点击收藏
  • 手机版
    手机扫一扫访问
    迪恩网络手机版
  • 关注官方公众号
    微信扫一扫关注
    公众号

速战速决 go - go 容器: 列表(列表的增删改查和遍历)

原作者: [db:作者] 来自: [db:来源] 收藏 邀请

速战速决 go https://github.com/webabcd/GoSample
作者 webabcd

示例如下:

container/list.go

// go 容器 - 列表(列表的增删改查和遍历)
// 注:
// 1、List 中可以包含不同类型的数据
// 2、添加进 List 中的数据都会被封装为 Element 对象
// 3、通过 Element.Value 获取或修改元素的值

package container

import (
	"container/list"
	"fmt"
)

func ListSample() {
	list_sample1()
	list_sample2()
}

func list_sample1() {
	// 声明一个 List(此处的 a 是一个指针)
	a := list.New()
	// 声明一个 List(此处的 b 是指针指向的值)
	var b list.List
	fmt.Printf("%p, %p\n", a, &b) // 0xc000110480, 0xc0001104b0

	// 在尾部添加一个数据
	// a 是指针,这里不是应该写成 (*a).PushBack("a") 吗?当然可以这么写,不过由于 go 支持语法糖(syntactic sugar)技术,他会自动转换的,所以你也可以按如下方式写
	a.PushBack("a") // a
	// 在开头添加一个数据
	a.PushFront(0) // 0 a
	// 在尾部添加一个 List
	a.PushBackList(a) // 0 a 0 a

	b.PushBack(true)
	// 在开头添加一个 List
	a.PushFrontList(&b) // true 0 a 0 a

	// 返回值就是你添加数据对应的 Element 对象
	el := a.PushBack("x") // true 0 a 0 a x
	// 在指定的 Element 对象之后添加数据
	a.InsertAfter("x_after", el) // true 0 a 0 a x x_after
	// 在指定的 Element 对象之前添加数据
	a.InsertBefore("x_before", el) // true 0 a 0 a x_before x x_after

	// 删除指定的 Element 对象
	a.Remove(el) // true 0 a 0 a x_before x_after

	// 遍历 List
	for i := a.Front(); i != nil; i = i.Next() {
		fmt.Println(i.Value)
	}
}

func list_sample2() {
	a := list.New()
	a.PushBack(0)
	a.PushBack(1)
	a.PushBack(2)
	a.PushBack(3)
	a.PushBack(4)
	a.PushBack(5)

	// List 有如下方法
	//   Font() - 取第一个数据的 Element 对象
	//   Back() - 取最后一个数据的 Element 对象
	//   MoveToFront(), MoveToBack(), MoveBefore(), MoveAfter() - 移动 Element 对象的相关操作
	// Element 有如下方法和属性
	//   Next() - 获取当前 Element 对象的在 List 中的下一个 Element 对象(没有则会返回 nil)
	//   Prev() - 获取当前 Element 对象的在 List 中的上一个 Element 对象(没有则会返回 nil)
	//   Value - 表示 Element 对象的值
	b := a.Front().Next()        // 1
	c := a.Front().Next().Next() // 2
	// 将 c 移动到 List 的开头
	a.MoveToFront(c) // 2 0 1 3 4 5
	// 将 b 移动到 c 的后面
	a.MoveAfter(b, c) // 2 1 0 3 4 5

	// 修改指定 Element 对象的值
	a.Back().Value = 100 // // 2 1 0 3 4 5

	// 取指定 Element 对象的值
	fmt.Println(b.Value, c.Value) // 1 2

	// 遍历 List
	for i := a.Front(); i != nil; i = i.Next() {
		fmt.Println(i.Value)
	}
}

速战速决 go https://github.com/webabcd/GoSample
作者 webabcd


鲜花

握手

雷人

路过

鸡蛋
该文章已有0人参与评论

请发表评论

全部评论

专题导读
上一篇:
Go Go发布时间:2022-07-10
下一篇:
GO简易聊天系统后台源码分享发布时间:2022-07-10
热门推荐
热门话题
阅读排行榜

扫描微信二维码

查看手机版网站

随时了解更新最新资讯

139-2527-9053

在线客服(服务时间 9:00~18:00)

在线QQ客服
地址:深圳市南山区西丽大学城创智工业园
电邮:jeky_zhao#qq.com
移动电话:139-2527-9053

Powered by 互联科技 X3.4© 2001-2213 极客世界.|Sitemap