From a429d4607203398e694da60d0fbf2458dfcc1ec7 Mon Sep 17 00:00:00 2001 From: dudaodong Date: Mon, 30 May 2022 21:09:21 +0800 Subject: [PATCH] docs: add list_zh-CN.md --- docs/datastructure/list_zh-CN.md | 712 +++++++++++++++++++++++++++++++ 1 file changed, 712 insertions(+) create mode 100644 docs/datastructure/list_zh-CN.md diff --git a/docs/datastructure/list_zh-CN.md b/docs/datastructure/list_zh-CN.md new file mode 100644 index 0000000..e7cf69c --- /dev/null +++ b/docs/datastructure/list_zh-CN.md @@ -0,0 +1,712 @@ +# List +List是线性表数据结构, 用go切片实现。 + +
+ +## 源码 + +- [https://github.com/duke-git/lancet/blob/main/datastructure/list/list.go](https://github.com/duke-git/lancet/blob/main/datastructure/list/list.go) + + +
+ +## 用法 +```go +import ( + "github.com/duke-git/lancet/v2/datastructure" +) +``` + +
+ +## 目录 + +- [NewList](#NewList) +- [Contain](#Contain) +- [Data](#Data) +- [ValueOf](#ValueOf) +- [IndexOf](#IndexOf) +- [Push](#Push) +- [PopFirst](#PopFirst) +- [PopLast](#PopLast) +- [DeleteAt](#DeleteAt) +- [InsertAt](#InsertAt) +- [UpdateAt](#UpdateAt) +- [Equal](#Equal) +- [IsEmpty](#IsEmpty) +- [Clear](#Clear) +- [Clone](#Clone) +- [Merge](#Merge) +- [Size](#Size) +- [Swap](#Swap) +- [Reverse](#Reverse) +- [Unique](#Unique) +- [Union](#Union) +- [Intersection](#Intersection) + +
+ +## 文档 + +### NewList +

返回List指针实例

+ +函数签名: + +```go +type List[T any] struct { + data []T +} +func NewList[T any](data []T) *List[T] +``` +例子: + +```go +package main + +import ( + "fmt" + list "github.com/duke-git/lancet/v2/datastructure/list" +) + +func main() { + li := list.NewList([]int{1, 2, 3}) + fmt.Println(li) +} +``` + + + +### Contain +

判断列表中是否包含特定值

+ +函数签名: + +```go +func (l *List[T]) Contain(value T) bool +``` +例子: + +```go +package main + +import ( + "fmt" + list "github.com/duke-git/lancet/v2/datastructure/list" +) + +func main() { + li := list.NewList([]int{1, 2, 3}) + + fmt.Println(li.Contain(1)) //true + fmt.Println(li.Contain(0)) //false +} +``` + + + + +### Data +

返回List中所有数据(切片)

+ +函数签名: + +```go +func (l *List[T]) Data() []T +``` +例子: + +```go +package main + +import ( + "fmt" + list "github.com/duke-git/lancet/v2/datastructure/list" +) + +func main() { + li := list.NewList([]int{1, 2, 3}) + data := li.Data() + + fmt.Println(data) //[]int{1, 2, 3} +} +``` + + + + +### ValueOf +

返回列表中索引处的值指针

+ +函数签名: + +```go +func (l *List[T]) ValueOf(index int) (*T, bool) +``` +例子: + +```go +package main + +import ( + "fmt" + list "github.com/duke-git/lancet/v2/datastructure/list" +) + +func main() { + li := list.NewList([]int{1, 2, 3}) + v, ok := li.ValueOf(0) + + fmt.Println(*v) //1 + fmt.Println(ok) //true +} +``` + + + + +### IndexOf +

返回列表中值的索引,如果没有找到返回-1

+ +函数签名: + +```go +func (l *List[T]) IndexOf(value T) int +``` +例子: + +```go +package main + +import ( + "fmt" + list "github.com/duke-git/lancet/v2/datastructure/list" +) + +func main() { + li := list.NewList([]int{1, 2, 3}) + + fmt.Println(li.IndexOf(1)) //0 + fmt.Println(li.IndexOf(0)) //-1 +} +``` + + + +### Push +

将值附加到列表末尾

+ +函数签名: + +```go +func (l *List[T]) Push(value T) +``` +例子: + +```go +package main + +import ( + "fmt" + list "github.com/duke-git/lancet/v2/datastructure/list" +) + +func main() { + li := list.NewList([]int{1, 2, 3}) + li.Push(4) + + fmt.Println(li.Data()) //[]int{1, 2, 3, 4} +} +``` + + + + +### PopFirst +

删除列表的第一个值并返回该值

+ +函数签名: + +```go +func (l *List[T]) PopFirst() (*T, bool) +``` +例子: + +```go +package main + +import ( + "fmt" + list "github.com/duke-git/lancet/v2/datastructure/list" +) + +func main() { + li := list.NewList([]int{1, 2, 3}) + v, ok := li.PopFirst() + + fmt.Println(*v) //1 + fmt.Println(ok) //true + fmt.Println(li.Data()) //2, 3 +} +``` + + + + + +### PopFirst +

删除列表的最后一个值并返回该值

+ +函数签名: + +```go +func (l *List[T]) PopLast() (*T, bool) +``` +例子: + +```go +package main + +import ( + "fmt" + list "github.com/duke-git/lancet/v2/datastructure/list" +) + +func main() { + li := list.NewList([]int{1, 2, 3}) + v, ok := li.PopLast() + + fmt.Println(*v) //3 + fmt.Println(ok) //true + fmt.Println(li.Data()) //1, 2 +} +``` + + + + +### DeleteAt +

删除索引处列表的值,如果索引不在0和列表数据长度之间,则不执行任何操作

+ +函数签名: + +```go +func (l *List[T]) DeleteAt(index int) +``` +例子: + +```go +package main + +import ( + "fmt" + list "github.com/duke-git/lancet/v2/datastructure/list" +) + +func main() { + li := list.NewList([]int{1, 2, 3, 4}) + + li.DeleteAt(-1) + fmt.Println(li.Data()) //1,2,3,4 + + li.DeleteAt(4) + fmt.Println(li.Data()) //1,2,3,4 + + li.DeleteAt(0) + fmt.Println(li.Data()) //2,3,4 + + li.DeleteAt(2) + fmt.Println(li.Data()) //2,3 +} +``` + + + + +### InsertAt +

在索引处插入值到列表中,如果索引不在 0 和列表数据长度之间,则不执行任何操作

+ +函数签名: + +```go +func (l *List[T]) InsertAt(index int, value T) +``` +例子: + +```go +package main + +import ( + "fmt" + list "github.com/duke-git/lancet/v2/datastructure/list" +) + +func main() { + li := list.NewList([]int{1, 2, 3}) + + li.InsertAt(-1, 0) + fmt.Println(li.Data()) //1,2,3 + + li.InsertAt(4, 0) + fmt.Println(li.Data()) //1,2,3 + + li.InsertAt(3, 4) + fmt.Println(li.Data()) //1,2,3,4 + + // li.InsertAt(2, 4) + // fmt.Println(li.Data()) //1,2,4,3 +} +``` + + + +### UpdateAt +

更新索引处列表的值,索引应该在0和列表数据长度-1之间

+ +函数签名: + +```go +func (l *List[T]) UpdateAt(index int, value T) +``` +例子: + +```go +package main + +import ( + "fmt" + list "github.com/duke-git/lancet/v2/datastructure/list" +) + +func main() { + li := list.NewList([]int{1, 2, 3}) + + li.UpdateAt(-1, 0) + fmt.Println(li.Data()) //1,2,3 + + li.UpdateAt(2, 4) + fmt.Println(li.Data()) //1,2,4 + + li.UpdateAt(3, 5) + fmt.Println(li.Data()) //1,2,4 +} +``` + + +### Equal +

比较一个列表和另一个列表,在每个元素上使用 reflect.DeepEqual

+ +函数签名: + +```go +func (l *List[T]) Equal(other *List[T]) bool +``` +例子: + +```go +package main + +import ( + "fmt" + list "github.com/duke-git/lancet/v2/datastructure/list" +) + +func main() { + li1 := list.NewList([]int{1, 2, 3, 4}) + li2 := list.NewList([]int{1, 2, 3, 4}) + li3 := list.NewList([]int{1, 2, 3}) + + fmt.Println(li1.Equal(li2)) //true + fmt.Println(li1.Equal(li3)) //false +} +``` + + + +### IsEmpty +

判断列表是否为空

+ +函数签名: + +```go +func (l *List[T]) IsEmpty() bool +``` +例子: + +```go +package main + +import ( + "fmt" + list "github.com/duke-git/lancet/v2/datastructure/list" +) + +func main() { + li1 := list.NewList([]int{1, 2, 3}) + li2 := list.NewList([]int{}) + + fmt.Println(li1.IsEmpty()) //false + fmt.Println(li2.IsEmpty()) //true +} +``` + + + + +### Clear +

清空列表数据

+ +函数签名: + +```go +func (l *List[T]) Clear() +``` +例子: + +```go +package main + +import ( + "fmt" + list "github.com/duke-git/lancet/v2/datastructure/list" +) + +func main() { + li := list.NewList([]int{1, 2, 3}) + li.Clear() + + fmt.Println(li.Data()) // empty +} +``` + + + +### Clone +

返回列表的一个拷贝

+ +函数签名: + +```go +func (l *List[T]) Clone() *List[T] +``` +例子: + +```go +package main + +import ( + "fmt" + list "github.com/duke-git/lancet/v2/datastructure/list" +) + +func main() { + li := list.NewList([]int{1, 2, 3}) + cloneList := li.Clone() + + fmt.Println(cloneList.Data()) // 1,2,3 +} +``` + + + + +### Merge +

合并两个列表,返回新的列表

+ +函数签名: + +```go +func (l *List[T]) Merge(other *List[T]) *List[T] +``` +例子: + +```go +package main + +import ( + "fmt" + list "github.com/duke-git/lancet/v2/datastructure/list" +) + +func main() { + li1 := list.NewList([]int{1, 2, 3, 4}) + li2 := list.NewList([]int{4, 5, 6}) + li3 := li1.Merge(li2) + + fmt.Println(li3.Data()) //1, 2, 3, 4, 4, 5, 6 +} +``` + + + +### Size +

返回列表数据项的数量

+ +函数签名: + +```go +func (l *List[T]) Size() int +``` +例子: + +```go +package main + +import ( + "fmt" + list "github.com/duke-git/lancet/v2/datastructure/list" +) + +func main() { + li := list.NewList([]int{1, 2, 3, 4}) + + fmt.Println(li.Size()) //4 +} +``` + + + + +### Swap +

交换列表中两个索引位置的值

+ +函数签名: + +```go +func (l *List[T]) Swap(i, j int) +``` +例子: + +```go +package main + +import ( + "fmt" + list "github.com/duke-git/lancet/v2/datastructure/list" +) + +func main() { + li := list.NewList([]int{1, 2, 3, 4}) + li.Swap(0, 3) + + fmt.Println(li.Data()) //4, 2, 3, 1 +} +``` + + + + +### Reverse +

反转列表的数据项顺序

+ +函数签名: + +```go +func (l *List[T]) Reverse() +``` +例子: + +```go +package main + +import ( + "fmt" + list "github.com/duke-git/lancet/v2/datastructure/list" +) + +func main() { + li := list.NewList([]int{1, 2, 3, 4}) + li.Reverse() + + fmt.Println(li.Data()) //4, 3, 2, 1 +} +``` + + + + +### Unique +

列表去除重复数据项

+ +函数签名: + +```go +func (l *List[T]) Unique() +``` +例子: + +```go +package main + +import ( + "fmt" + list "github.com/duke-git/lancet/v2/datastructure/list" +) + +func main() { + li := list.NewList([]int{1, 2, 2, 3, 4}) + li.Unique() + + fmt.Println(li.Data()) //1,2,3,4 +} +``` + + + + +### Union +

两个列表取并集,去除重复数据项

+ +函数签名: + +```go +func (l *List[T]) Union(other *List[T]) *List[T] +``` +例子: + +```go +package main + +import ( + "fmt" + list "github.com/duke-git/lancet/v2/datastructure/list" +) + +func main() { + li1 := list.NewList([]int{1, 2, 3, 4}) + li2 := list.NewList([]int{4, 5, 6}) + li3 := li1.Union(li2) + + fmt.Println(li3.Data()) //1,2,3,4,5,6 +} +``` + + + + +### Intersection +

两个列表取交集

+ +函数签名: + +```go +func (l *List[T]) Intersection(other *List[T]) *List[T] +``` +例子: + +```go +package main + +import ( + "fmt" + list "github.com/duke-git/lancet/v2/datastructure/list" +) + +func main() { + li1 := list.NewList([]int{1, 2, 3, 4}) + li2 := list.NewList([]int{4, 5, 6}) + li3 := li1.Intersection(li2) + + fmt.Println(li3.Data()) //4 +} +``` \ No newline at end of file