diff --git a/docs/datastructure/copyonwritelist.md b/docs/datastructure/copyonwritelist.md index 1b21b39..c2b25ec 100644 --- a/docs/datastructure/copyonwritelist.md +++ b/docs/datastructure/copyonwritelist.md @@ -1,14 +1,17 @@ # CopyOnWriteList + CopyOnWriteList is a thread-safe list implementation that uses go slicing as its base. . When writing, a new slice is copied and assigned to the original slice when writing is complete.When reading, the original slice is read directly. ## 源码 -- [https://github.com/duke-git/lancet/blob/main/datastructure/list/copyonwritelist.go](https://github.com/duke-git/lancet/blob/main /datastructure/list/copyonwritelist.go) + +- [https://github.com/duke-git/lancet/blob/main/datastructure/list/copyonwritelist.go](https://github.com/duke-git/lancet/blob/main /datastructure/list/copyonwritelist.go) ## 用法 + ```go import ( -"github.com/duke-git/lancet/datastructure/list" + "github.com/duke-git/lancet/datastructure/list" ) ``` @@ -16,30 +19,32 @@ import (
## 目录 -- [NewCopyOnWriteList](#NewCopyOnWriteList) -- [Size](#Size) -- [Get](#Get) -- [Set](#Set) -- [Remove](#Remove) -- [IndexOf](#IndexOf) -- [LastIndexOf](#LastIndexOf) -- [IsEmpty](#IsEmpty) -- [Contain](#Contain) -- [ValueOf](#ValueOf) -- [Add](#Add) -- [AddAll](#AddAll) -- [AddByIndex](#AddByIndex) -- [DeleteAt](#DeleteAt) -- [DeleteIf](#DeleteIf) -- [DeleteBy](#DeleteBy) -- [DeleteRange](#DeleteRange) -- [Equal](#Equal) +- [NewCopyOnWriteList](#NewCopyOnWriteList) +- [Size](#Size) +- [Get](#Get) +- [Set](#Set) +- [Remove](#Remove) +- [IndexOf](#IndexOf) +- [LastIndexOf](#LastIndexOf) +- [IsEmpty](#IsEmpty) +- [Contain](#Contain) +- [ValueOf](#ValueOf) +- [Add](#Add) +- [AddAll](#AddAll) +- [AddByIndex](#AddByIndex) +- [DeleteAt](#DeleteAt) +- [DeleteIf](#DeleteIf) +- [DeleteBy](#DeleteBy) +- [DeleteRange](#DeleteRange) +- [Equal](#Equal) ## Documentation ### NewCopyOnWriteList + Returns a CopyOnWriteList with empty slices. + ```go type CopyOnWriteList[T any] struct { data []T @@ -49,7 +54,9 @@ type CopyOnWriteList[T any] struct { func NewCopyOnWriteList() *CopyOnWriteList ``` + #### Example + ```go package main @@ -62,14 +69,18 @@ func main() { l := list.NewCopyOnWriteList([]int{1,2,3}) fmt.Println(l) } +``` + +### Size -fmt.Println(l) } -### Size Returns the length of the CopyOnWriteList. + ```go func (l *CopyOnWriteList[T]) Size() int ``` + #### Example + ```go package main @@ -86,57 +97,67 @@ func main() { ``` ### Get + Returns the element at the specified position in the list + ```go func (c *CopyOnWriteList[T]) Get(index int) *T ``` #### Example + ```go package main import ( -"fmt" -"github.com/duke-git/lancet/datastructure/list" + "fmt" + "github.com/duke-git/lancet/datastructure/list" ) func main() { -l := list.NewCopyOnWriteList([]int{1,2,3}) -fmt.Println(l.Get(2)) + l := list.NewCopyOnWriteList([]int{1,2,3}) + fmt.Println(l.Get(2)) } ``` - ### Set + Replaces the element at the specified position in this list with the specified element. + ```go func (c *CopyOnWriteList[T]) Set(index int, e T) (oldValue *T, ok bool) ``` #### Example + ```go package main import ( -"fmt" -"github.com/duke-git/lancet/datastructure/list" + "fmt" + "github.com/duke-git/lancet/datastructure/list" ) func main() { -l := list.NewCopyOnWriteList([]int{1,2,3}) -fmt.Println(l.Set(2, 4)) + l := list.NewCopyOnWriteList([]int{1,2,3}) + fmt.Println(l.Set(2, 4)) } ``` + ### Remove ### IndexOf + Returns the index of the value in the list, or -1 if not found. + ```go func (c *CopyOnWriteList[T]) IndexOf(e T) int ``` + #### Example + ```go package main @@ -153,6 +174,7 @@ func main() { ``` ### LastIndexOf + Returns the index of the last occurrence of the specified element in this list, or -1 if this list does not contain that element. ```go @@ -160,28 +182,32 @@ func (c *CopyOnWriteList[T]) LastIndexOf(e T) int ``` #### Example + ```go package main import ( -"fmt" -"github.com/duke-git/lancet/datastructure/list" + "fmt" + "github.com/duke-git/lancet/datastructure/list" ) func main() { -l := list.NewCopyOnWriteList([]int{1,2,3,1}) -fmt.Println(l.LastIndexOf(1)) + l := list.NewCopyOnWriteList([]int{1,2,3,1}) + fmt.Println(l.LastIndexOf(1)) } ``` ### IsEmpty + Returns true if this list does not contain any elements. + ```go func (c *CopyOnWriteList[T]) IsEmpty() bool ``` #### Example + ```go package main @@ -191,19 +217,21 @@ import ( ) func main() { -l := list.NewCopyOnWriteList([]int{}) -fmt.Println(l.IsEmpty()) + l := list.NewCopyOnWriteList([]int{}) + fmt.Println(l.IsEmpty()) } ``` - - ### Contain + Determines if a CopyOnWriteList contains an element. + ```go -func (c *CopyOnWriteList[T]) Contain(e T) bool +func (c *CopyOnWriteList[T]) Contain(e T) bool ``` + #### Example + ```go package main @@ -218,14 +246,16 @@ fmt.Println(l.Contain(1)) } ``` - ### ValueOf + Returns a pointer to the value at the index in the list + ```go func (c *CopyOnWriteList[T]) ValueOf(index int) []T ``` #### Example + ```go package main @@ -242,12 +272,15 @@ func main() { ``` ### Add + Appends the specified element to the end of the list. + ```go func (c *CopyOnWriteList[T]) Add(e T) bool ``` #### Example + ```go package main @@ -266,12 +299,15 @@ func main() { ``` ### AddAll + Appends all the elements of the specified collection to the end of this list + ```go func (c *CopyOnWriteList[T]) AddAll(e []T) bool ``` #### Example + ```go package main @@ -289,52 +325,63 @@ func main() { ``` ### AddByIndex + Inserts the specified element into the list at the specified position. ```go func (c *CopyOnWriteList[T]) AddByIndex(index int, e T) bool ``` + #### Example + ```go package main import ( -"fmt" -"github.com/duke-git/lancet/datastructure/list" + "fmt" + "github.com/duke-git/lancet/datastructure/list" ) func main() { -l := list.NewCopyOnWriteList([]int{1,2,3}) -list.AddByIndex(2, 6) -fmt.Println(l.getList()) + l := list.NewCopyOnWriteList([]int{1,2,3}) + list.AddByIndex(2, 6) + fmt.Println(l.getList()) } ``` ### DeleteAt + Removes the element at the specified position in this list. + ```go func (c *CopyOnWriteList[T]) DeleteAt(index int) (oldValue *T, ok bool) ``` + #### Example + ```go package main import ( -"fmt" -"github.com/duke-git/lancet/datastructure/list" + "fmt" + "github.com/duke-git/lancet/datastructure/list" ) func main() { -l := list.NewCopyOnWriteList([]int{1,2,3}) -list.DeleteAt(2) -fmt.Println(l.getList()) + l := list.NewCopyOnWriteList([]int{1,2,3}) + list.DeleteAt(2) + fmt.Println(l.getList()) } ``` ### DeleteIf + Removes the first occurrence of the specified element from this list (if it exists). + ```go func (c *CopyOnWriteList[T]) DeleteIf(func(T) bool) (oldValue *T, ok bool) ``` + #### Example + ```go package main import ( @@ -352,11 +399,15 @@ func main() { ``` ### DeleteBy + Deletes the first occurrence of the specified element from this list (if it exists). -```## go + +```go func (c *CopyOnWriteList[T]) DeleteBy(e T) (*T bool) ``` + #### Example + ```go package main import ( @@ -371,15 +422,17 @@ func main() { } ``` - ### DeleteRange + Deletes all elements from this list with indexes between fromIndex (included) and toIndex (not included). (leftCloseRightOpen) + ```go -func (c *CopyOnWriteList[T]) DeleteRange(start int, end int) +func (c *CopyOnWriteList[T]) DeleteRange(start int, end int) ``` #### Example + ```go package main import ( @@ -388,19 +441,22 @@ import ( ) func main() { -l := list.NewCopyOnWriteList([]int{1,2,3,4,5,6,7,8,9}) -list.DeleteRange(2, 5) -fmt.Println(l.getList()) + l := list.NewCopyOnWriteList([]int{1,2,3,4,5,6,7,8,9}) + list.DeleteRange(2, 5) + fmt.Println(l.getList()) } ``` ### Equal + Returns true if the specified object is equal to this list ```go func (c *CopyOnWriteList[T]) Equal(e []T) bool ``` + #### Example + ```go package main import ( @@ -412,4 +468,4 @@ func main() { l := list.NewCopyOnWriteList([]int{1,2,3,4,5,6,7,8,9}) fmt.Println(l.Equal([]int{1,2,3,4,5,6,7,8,9})) } -``` \ No newline at end of file +``` diff --git a/docs/datastructure/copyonwritelist_zh-CN.md b/docs/datastructure/copyonwritelist_zh-CN.md index db6fa74..03e8b49 100644 --- a/docs/datastructure/copyonwritelist_zh-CN.md +++ b/docs/datastructure/copyonwritelist_zh-CN.md @@ -1,15 +1,18 @@ # CopyOnWriteList -CopyOnWriteList 是一个线程安全的List实现,底层使用go 切片 + +CopyOnWriteList 是一个线程安全的 List 实现,底层使用 go 切片 .在写入时,会复制一份新的切片,写入完成后,再将新的切片赋值给原来的切片. 在读取时,直接读取原来的切片 ## 源码 -- [https://github.com/duke-git/lancet/blob/main/datastructure/list/copyonwritelist.go](https://github.com/duke-git/lancet/blob/main/datastructure/list/copyonwritelist.go) + +- [https://github.com/duke-git/lancet/blob/main/datastructure/list/copyonwritelist.go](https://github.com/duke-git/lancet/blob/main/datastructure/list/copyonwritelist.go) ## 用法 + ```go import ( -"github.com/duke-git/lancet/datastructure/list" + "github.com/duke-git/lancet/datastructure/list" ) ``` @@ -17,30 +20,32 @@ import (
## 目录 -- [NewCopyOnWriteList](#NewCopyOnWriteList) -- [Size](#Size) -- [Get](#Get) -- [Set](#Set) -- [Remove](#Remove) -- [IndexOf](#IndexOf) -- [LastIndexOf](#LastIndexOf) -- [IsEmpty](#IsEmpty) -- [Contain](#Contain) -- [ValueOf](#ValueOf) -- [Add](#Add) -- [AddAll](#AddAll) -- [AddByIndex](#AddByIndex) -- [DeleteAt](#DeleteAt) -- [DeleteIf](#DeleteIf) -- [DeleteBy](#DeleteBy) -- [DeleteRange](#DeleteRange) -- [Equal](#Equal) +- [NewCopyOnWriteList](#NewCopyOnWriteList) +- [Size](#Size) +- [Get](#Get) +- [Set](#Set) +- [Remove](#Remove) +- [IndexOf](#IndexOf) +- [LastIndexOf](#LastIndexOf) +- [IsEmpty](#IsEmpty) +- [Contain](#Contain) +- [ValueOf](#ValueOf) +- [Add](#Add) +- [AddAll](#AddAll) +- [AddByIndex](#AddByIndex) +- [DeleteAt](#DeleteAt) +- [DeleteIf](#DeleteIf) +- [DeleteBy](#DeleteBy) +- [DeleteRange](#DeleteRange) +- [Equal](#Equal) ## 文档 ### NewCopyOnWriteList -返回一个具有空切片的CopyOnWriteList + +返回一个具有空切片的 CopyOnWriteList。 + ```go type CopyOnWriteList[T any] struct { data []T @@ -50,7 +55,9 @@ type CopyOnWriteList[T any] struct { func NewCopyOnWriteList() *CopyOnWriteList ``` + #### 示例 + ```go package main @@ -65,12 +72,17 @@ func main() { } ``` -### Size -返回CopyOnWriteList的长度 + +### Size + +返回 CopyOnWriteList 的长度。 + ```go func (l *CopyOnWriteList[T]) Size() int ``` + #### 示例 + ```go package main @@ -87,12 +99,15 @@ func main() { ``` ### Get + 返回列表中指定位置的元素 + ```go func (c *CopyOnWriteList[T]) Get(index int) *T ``` #### 示例 + ```go package main @@ -108,14 +123,16 @@ func main() { ``` - ### Set + 将此列表中指定位置的元素替换为指定元素。 + ```go func (c *CopyOnWriteList[T]) Set(index int, e T) (oldValue *T, ok bool) ``` #### 示例 + ```go package main @@ -130,14 +147,19 @@ func main() { } ``` + ### Remove ### IndexOf -返回列表中值的索引,如果没有找到返回-1 + +返回列表中值的索引,如果没有找到返回-1。 + ```go func (c *CopyOnWriteList[T]) IndexOf(e T) int ``` + #### 示例 + ```go package main @@ -154,13 +176,15 @@ func main() { ``` ### LastIndexOf -返回指定元素在此列表中最后出现的索引,如果此列表不包含该元素,则返回-1 + +返回指定元素在此列表中最后出现的索引,如果此列表不包含该元素,则返回-1。 ```go func (c *CopyOnWriteList[T]) LastIndexOf(e T) int ``` #### 示例 + ```go package main @@ -177,12 +201,15 @@ func main() { ``` ### IsEmpty -如果此列表不包含任何元素,则返回true。 + +如果此列表不包含任何元素,则返回 true。 + ```go func (c *CopyOnWriteList[T]) IsEmpty() bool ``` #### 示例 + ```go package main @@ -197,14 +224,16 @@ func main() { } ``` - - ### Contain -判断CopyOnWriteList是否包含某个元素 + +判断 CopyOnWriteList 是否包含某个元素 + ```go -func (c *CopyOnWriteList[T]) Contain(e T) bool +func (c *CopyOnWriteList[T]) Contain(e T) bool ``` + #### 示例 + ```go package main @@ -219,14 +248,16 @@ func main() { } ``` - ### ValueOf + 返回列表中索引处的值指针 + ```go func (c *CopyOnWriteList[T]) ValueOf(index int) []T ``` #### 示例 + ```go package main @@ -243,12 +274,15 @@ func main() { ``` ### Add + 将指定的元素追加到此列表的末尾。 + ```go func (c *CopyOnWriteList[T]) Add(e T) bool ``` #### 示例 + ```go package main @@ -267,12 +301,15 @@ func main() { ``` ### AddAll + 将指定集合中的所有元素追加到此列表的末尾 + ```go func (c *CopyOnWriteList[T]) AddAll(e []T) bool ``` #### 示例 + ```go package main @@ -290,12 +327,15 @@ func main() { ``` ### AddByIndex -将指定元素插入此列表中的指定位置 + +将指定元素插入此列表中的指定位置。 ```go func (c *CopyOnWriteList[T]) AddByIndex(index int, e T) bool ``` + #### 示例 + ```go package main import ( @@ -311,11 +351,15 @@ func main() { ``` ### DeleteAt + 移除此列表中指定位置的元素。 + ```go func (c *CopyOnWriteList[T]) DeleteAt(index int) (oldValue *T, ok bool) ``` + #### 示例 + ```go package main import ( @@ -331,11 +375,15 @@ func main() { ``` ### DeleteIf + 从此列表中删除第一个出现的指定元素(如果该元素存在)。 + ```go func (c *CopyOnWriteList[T]) DeleteIf(f func(T) bool) (oldValue *T, ok bool) ``` + #### 示例 + ```go package main import ( @@ -353,11 +401,15 @@ func main() { ``` ### DeleteBy + 从此列表中删除第一个出现的指定元素(如果该元素存在)。 + ```go func (c *CopyOnWriteList[T]) DeleteBy(e T) (*T bool) ``` + #### 示例 + ```go package main import ( @@ -372,14 +424,17 @@ func main() { } ``` - ### DeleteRange -从该列表中删除索引介于fromIndex(包含)和toIndex(不包含)之间的所有元素。 -(左闭右开) + +从该列表中删除索引介于 fromIndex(包含)和 toIndex(不包含)之间的所有元素。 +(左闭右开)。 + ```go -func (c *CopyOnWriteList[T]) DeleteRange(start int, end int) +func (c *CopyOnWriteList[T]) DeleteRange(start int, end int) ``` + #### 示例 + ```go package main import ( @@ -395,12 +450,15 @@ func main() { ``` ### Equal -如果指定的对象等于此列表,则返回true + +如果指定的对象等于此列表,则返回 true。 ```go func (c *CopyOnWriteList[T]) Equal(e []T) bool ``` + #### 示例 + ```go package main import ( @@ -412,4 +470,4 @@ func main() { l := list.NewCopyOnWriteList([]int{1,2,3,4,5,6,7,8,9}) fmt.Println(l.Equal([]int{1,2,3,4,5,6,7,8,9})) } -``` \ No newline at end of file +```