链表类

package
v0.0.0-...-fcd50c7 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Aug 21, 2024 License: MIT Imports: 6 Imported by: 0

Documentation

Overview

包glist提供了最常见的双链表容器,同时也支持并发安全/不安全切换功能。 md5:0b7229b4fa0fbb49

Index

Examples

Constants

This section is empty.

Variables

This section is empty.

Functions

This section is empty.

Types

type Element

type Element = list.Element

列表中元素的类型。 md5:f22a0215543484b0

type List

type List struct {
	// contains filtered or unexported fields
}

List是一个包含并发安全/不安全切换的双向链表。初始化时应设置该开关,并且之后不能更改。 md5:54c981e147e0a03a

func New

func New(safe ...bool) *List

New 创建并返回一个新的空双向链表。 md5:d0d0b0225c460030

Example
package main

import (
	"fmt"

	glist "github.com/888go/goframe/container/glist"
)

func main() {
	n := 10
	l := glist.New()
	for i := 0; i < n; i++ {
		l.PushBack(i)
	}

	fmt.Println(l.Len())
	fmt.Println(l)
	fmt.Println(l.FrontAll())
	fmt.Println(l.BackAll())

	for i := 0; i < n; i++ {
		fmt.Print(l.PopFront())
	}

	fmt.Println()
	fmt.Println(l.Len())

}
Output:
10
[0,1,2,3,4,5,6,7,8,9]
[0 1 2 3 4 5 6 7 8 9]
[9 8 7 6 5 4 3 2 1 0]
0123456789
0

func NewFrom

func NewFrom(array []interface{}, safe ...bool) *List

NewFrom 根据给定的切片 `array` 创建并返回一个新的列表。 参数 `safe` 用于指定是否在并发安全环境下使用列表,默认为 false。 md5:bee3fb299025c2d8

Example
package main

import (
	"fmt"

	garray "github.com/888go/goframe/container/garray"
	glist "github.com/888go/goframe/container/glist"
)

func main() {
	n := 10
	l := glist.NewFrom(garray.X创建并按范围(1, 10, 1).X取数组())

	fmt.Println(l.Len())
	fmt.Println(l)
	fmt.Println(l.FrontAll())
	fmt.Println(l.BackAll())

	for i := 0; i < n; i++ {
		fmt.Print(l.PopFront())
	}

	fmt.Println()
	fmt.Println(l.Len())

}
Output:
10
[1,2,3,4,5,6,7,8,9,10]
[1 2 3 4 5 6 7 8 9 10]
[10 9 8 7 6 5 4 3 2 1]
12345678910
0

func (*List) Back

func (l *List) Back() (e *Element)

Back 返回列表 `l` 的最后一个元素,如果列表为空则返回 nil。 md5:655654a2cad68be9

Example
package main

import (
	"fmt"

	garray "github.com/888go/goframe/container/garray"
	glist "github.com/888go/goframe/container/glist"
)

func main() {
	l := glist.NewFrom(garray.X创建并按范围(1, 5, 1).X取数组())

	fmt.Println(l.Back().Value)
	fmt.Println(l)

	e := l.Back()
	l.InsertBefore(e, "a")
	l.InsertAfter(e, 6)

	fmt.Println(l)

}
Output:
5
[1,2,3,4,5]
[1,2,3,4,a,5,6]

func (*List) BackAll

func (l *List) BackAll() (values []interface{})

BackAll 复制并返回 `l` 后面所有元素的值,以切片形式返回。 md5:2dd8e946eed83cc0

Example
package main

import (
	"fmt"

	garray "github.com/888go/goframe/container/garray"
	glist "github.com/888go/goframe/container/glist"
)

func main() {
	l := glist.NewFrom(garray.X创建并按范围(1, 5, 1).X取数组())

	fmt.Println(l)
	fmt.Println(l.BackAll())

}
Output:
[1,2,3,4,5]
[5 4 3 2 1]

func (*List) BackValue

func (l *List) BackValue() (value interface{})

BackValue 返回列表`l`的最后一个元素的值,如果列表为空,则返回nil。 md5:67d80721db31a403

Example
package main

import (
	"fmt"

	garray "github.com/888go/goframe/container/garray"
	glist "github.com/888go/goframe/container/glist"
)

func main() {
	l := glist.NewFrom(garray.X创建并按范围(1, 5, 1).X取数组())

	fmt.Println(l)
	fmt.Println(l.BackValue())

}
Output:
[1,2,3,4,5]
5

func (*List) Clear

func (l *List) Clear()

Clear是RemoveAll的别名。 md5:a37765a4c78aba68

func (*List) DeepCopy

func (l *List) DeepCopy() interface{}

DeepCopy实现当前类型的深拷贝接口。 md5:9cfbcb08109f6ce1

func (*List) Front

func (l *List) Front() (e *Element)

Front 返回列表 `l` 的第一个元素,如果列表为空则返回 nil。 md5:24d42ffa6d3fd791

Example
package main

import (
	"fmt"

	garray "github.com/888go/goframe/container/garray"
	glist "github.com/888go/goframe/container/glist"
)

func main() {
	l := glist.NewFrom(garray.X创建并按范围(1, 5, 1).X取数组())

	fmt.Println(l.Front().Value)
	fmt.Println(l)

	e := l.Front()
	l.InsertBefore(e, 0)
	l.InsertAfter(e, "a")

	fmt.Println(l)

}
Output:
1
[1,2,3,4,5]
[0,1,a,2,3,4,5]

func (*List) FrontAll

func (l *List) FrontAll() (values []interface{})

FrontAll 复制并返回列表 `l` 前端所有元素的值作为一个切片。 md5:93c8d4452c927952

Example
package main

import (
	"fmt"

	garray "github.com/888go/goframe/container/garray"
	glist "github.com/888go/goframe/container/glist"
)

func main() {
	l := glist.NewFrom(garray.X创建并按范围(1, 5, 1).X取数组())

	fmt.Println(l)
	fmt.Println(l.FrontAll())

}
Output:
[1,2,3,4,5]
[1 2 3 4 5]

func (*List) FrontValue

func (l *List) FrontValue() (value interface{})

FrontValue 返回列表 `l` 的第一个元素的值,如果列表为空,则返回 nil。 md5:c70a9c11634f5a74

Example
package main

import (
	"fmt"

	garray "github.com/888go/goframe/container/garray"
	glist "github.com/888go/goframe/container/glist"
)

func main() {
	l := glist.NewFrom(garray.X创建并按范围(1, 5, 1).X取数组())

	fmt.Println(l)
	fmt.Println(l.FrontValue())

}
Output:
[1,2,3,4,5]
1

func (*List) InsertAfter

func (l *List) InsertAfter(p *Element, v interface{}) (e *Element)

InsertAfter 在元素 `p` 之后立即插入一个新元素 `e`,其值为 `v`,并返回 `e`。 如果 `p` 不是 `l` 的元素,列表不会被修改。 `p` 不能为 nil。 md5:18fa91d04a81c29d

Example
package main

import (
	"fmt"

	garray "github.com/888go/goframe/container/garray"
	glist "github.com/888go/goframe/container/glist"
)

func main() {
	l := glist.NewFrom(garray.X创建并按范围(1, 5, 1).X取数组())

	fmt.Println(l.Len())
	fmt.Println(l)

	l.InsertAfter(l.Front(), "a")
	l.InsertAfter(l.Back(), "b")

	fmt.Println(l.Len())
	fmt.Println(l)

}
Output:
5
[1,2,3,4,5]
7
[1,a,2,3,4,5,b]

func (*List) InsertBefore

func (l *List) InsertBefore(p *Element, v interface{}) (e *Element)

InsertBefore 在`p`元素之前插入新元素`e`,值为`v`,然后返回`e`。 如果`p`不是`l`中的元素,则不修改列表。 `p`不能为nil。 md5:b4054a0ba93bd780

Example
package main

import (
	"fmt"

	garray "github.com/888go/goframe/container/garray"
	glist "github.com/888go/goframe/container/glist"
)

func main() {
	l := glist.NewFrom(garray.X创建并按范围(1, 5, 1).X取数组())

	fmt.Println(l.Len())
	fmt.Println(l)

	l.InsertBefore(l.Front(), "a")
	l.InsertBefore(l.Back(), "b")

	fmt.Println(l.Len())
	fmt.Println(l)

}
Output:
5
[1,2,3,4,5]
7
[a,1,2,3,4,b,5]

func (*List) IteratorAsc

func (l *List) IteratorAsc(f func(e *Element) bool)

IteratorAsc 按升序遍历列表,只读方式,使用给定的回调函数 `f`。 如果 `f` 返回 true,则继续遍历;如果返回 false,则停止。 md5:0a077491be342096

Example
package main

import (
	"fmt"

	garray "github.com/888go/goframe/container/garray"
	glist "github.com/888go/goframe/container/glist"
)

func main() {
	// concurrent-safe list.
	l := glist.NewFrom(garray.X创建并按范围(1, 10, 1).X取数组(), true)
	// 使用IteratorAsc从头开始迭代读取。 md5:6446e33c4d8538db
	l.IteratorAsc(func(e *glist.Element) bool {
		fmt.Print(e.Value)
		return true
	})

}
Output:
12345678910

func (*List) IteratorDesc

func (l *List) IteratorDesc(f func(e *Element) bool)

IteratorDesc 以降序方式遍历列表,使用给定的回调函数 `f`。如果 `f` 返回 true,则继续迭代;否则停止。 md5:b9a7d34f2e3426a7

Example
package main

import (
	"fmt"

	garray "github.com/888go/goframe/container/garray"
	glist "github.com/888go/goframe/container/glist"
)

func main() {
	// concurrent-safe list.
	l := glist.NewFrom(garray.X创建并按范围(1, 10, 1).X取数组(), true)
	// 使用IteratorDesc从尾部开始迭代读取。 md5:acede477df2af09d
	l.IteratorDesc(func(e *glist.Element) bool {
		fmt.Print(e.Value)
		return true
	})
}
Output:
10987654321

func (*List) Join

func (l *List) Join(glue string) string

Join使用字符串`glue`将list元素连接起来。 md5:daf9e3877e4dd942

Example
package main

import (
	"fmt"

	glist "github.com/888go/goframe/container/glist"
	"github.com/888go/goframe/frame/g"
)

func main() {
	var l glist.List
	l.PushBacks(g.Slice别名{"a", "b", "c", "d"})

	fmt.Println(l.Join(","))

}
Output:
a,b,c,d

func (*List) Len

func (l *List) Len() (length int)

Len 返回列表 `l` 的元素数量。 复杂度为 O(1)。 md5:d2de4a4e990d787d

Example
package main

import (
	"fmt"

	glist "github.com/888go/goframe/container/glist"
	"github.com/888go/goframe/frame/g"
)

func main() {
	l := glist.NewFrom(g.Slice别名{1, 2, 3, 4, 5})

	fmt.Println(l.Len())

}
Output:
5

func (*List) LockFunc

func (l *List) LockFunc(f func(list *list.List))

LockFunc 使用给定的回调函数 `f` 在 RWMutex.Lock 中锁定写操作。 md5:e73dbc0381ebb3dc

Example
package main

import (
	"container/list"
	"fmt"

	garray "github.com/888go/goframe/container/garray"
	glist "github.com/888go/goframe/container/glist"
)

func main() {
	// concurrent-safe list.
	l := glist.NewFrom(garray.X创建并按范围(1, 10, 1).X取数组(), true)
	// 从头开始遍历写入。 md5:09622b4042e0678f
	l.LockFunc(func(list *list.List) {
		length := list.Len()
		if length > 0 {
			for i, e := 0, list.Front(); i < length; i, e = i+1, e.Next() {
				if e.Value == 6 {
					e.Value = "M"
					break
				}
			}
		}
	})
	fmt.Println(l)

}
Output:
[1,2,3,4,5,M,7,8,9,10]

func (List) MarshalJSON

func (l List) MarshalJSON() ([]byte, error)

MarshalJSON 实现了接口 MarshalJSON 以供 json.Marshal 使用。 md5:43c3b36e60a18f9a

func (*List) MoveAfter

func (l *List) MoveAfter(e, p *Element)

MoveAfter 将元素 `e` 移动到 `p` 之后的新位置。 如果 `e` 或 `p` 不是 `l` 的元素,或者 `e` 等于 `p`,则列表不作任何修改。 元素 `e` 和 `p` 都不能为 nil。 md5:18e13c9c5720547c

Example
package main

import (
	"fmt"

	garray "github.com/888go/goframe/container/garray"
	glist "github.com/888go/goframe/container/glist"
)

func main() {
	l := glist.NewFrom(garray.X创建并按范围(1, 5, 1).X取数组())

	fmt.Println(l.Size())
	fmt.Println(l)

	// element of `l`
	e := l.PushFront(0)
	fmt.Println(l.Size())
	fmt.Println(l)

	l.MoveAfter(e, l.Back())

	fmt.Println(l.Size())
	fmt.Println(l)

	// not element of `l`
	e = &glist.Element{Value: -1}
	l.MoveAfter(e, l.Back())

	fmt.Println(l.Size())
	fmt.Println(l)

}
Output:
5
[1,2,3,4,5]
6
[0,1,2,3,4,5]
6
[1,2,3,4,5,0]
6
[1,2,3,4,5,0]

func (*List) MoveBefore

func (l *List) MoveBefore(e, p *Element)

MoveBefore 将元素 `e` 移动到其新的位置,位于 `p` 之前。如果 `e` 或 `p` 不是 `l` 的元素,或者 `e` 等于 `p`,则列表不会被修改。元素 `e` 和 `p` 都不能为 nil。 md5:b58644e1e9174539

Example
package main

import (
	"fmt"

	garray "github.com/888go/goframe/container/garray"
	glist "github.com/888go/goframe/container/glist"
)

func main() {
	l := glist.NewFrom(garray.X创建并按范围(1, 5, 1).X取数组())

	fmt.Println(l.Size())
	fmt.Println(l)

	// element of `l`
	e := l.PushBack(6)
	fmt.Println(l.Size())
	fmt.Println(l)

	l.MoveBefore(e, l.Front())

	fmt.Println(l.Size())
	fmt.Println(l)

	// not element of `l`
	e = &glist.Element{Value: 7}
	l.MoveBefore(e, l.Front())

	fmt.Println(l.Size())
	fmt.Println(l)

}
Output:
5
[1,2,3,4,5]
6
[1,2,3,4,5,6]
6
[6,1,2,3,4,5]
6
[6,1,2,3,4,5]

func (*List) MoveToBack

func (l *List) MoveToBack(e *Element)

MoveToBack 将元素 `e` 移动到列表 `l` 的末尾。 如果 `e` 不是 `l` 的元素,列表不会被修改。 元素不能为空。 md5:97cb0a61b230357a

Example
package main

import (
	"fmt"

	garray "github.com/888go/goframe/container/garray"
	glist "github.com/888go/goframe/container/glist"
)

func main() {
	l := glist.NewFrom(garray.X创建并按范围(1, 5, 1).X取数组())

	fmt.Println(l.Size())
	fmt.Println(l)

	// element of `l`
	l.MoveToBack(l.Front())

	fmt.Println(l.Size())
	fmt.Println(l)

	// not element of `l`
	e := &glist.Element{Value: 0}
	l.MoveToBack(e)

	fmt.Println(l.Size())
	fmt.Println(l)

}
Output:
5
[1,2,3,4,5]
5
[2,3,4,5,1]
5
[2,3,4,5,1]

func (*List) MoveToFront

func (l *List) MoveToFront(e *Element)

MoveToFront 将元素 `e` 移动到列表 `l` 的前面。 如果 `e` 不是 `l` 中的元素,列表将不会被修改。 元素必须不为 nil。 md5:8b3809d7912952aa

Example
package main

import (
	"fmt"

	garray "github.com/888go/goframe/container/garray"
	glist "github.com/888go/goframe/container/glist"
)

func main() {
	l := glist.NewFrom(garray.X创建并按范围(1, 5, 1).X取数组())

	fmt.Println(l.Size())
	fmt.Println(l)

	// element of `l`
	l.MoveToFront(l.Back())

	fmt.Println(l.Size())
	fmt.Println(l)

	// not element of `l`
	e := &glist.Element{Value: 6}
	l.MoveToFront(e)

	fmt.Println(l.Size())
	fmt.Println(l)

}
Output:
5
[1,2,3,4,5]
5
[5,1,2,3,4]
5
[5,1,2,3,4]

func (*List) PopBack

func (l *List) PopBack() (value interface{})

PopBack 从 `l` 的尾部移除一个元素,并返回该元素的值。 md5:71aef7d06e374d4c

Example
package main

import (
	"fmt"

	garray "github.com/888go/goframe/container/garray"
	glist "github.com/888go/goframe/container/glist"
)

func main() {
	l := glist.NewFrom(garray.X创建并按范围(1, 5, 1).X取数组())

	fmt.Println(l.Len())
	fmt.Println(l)
	fmt.Println(l.PopBack())
	fmt.Println(l.Len())
	fmt.Println(l)

}
Output:
5
[1,2,3,4,5]
5
4
[1,2,3,4]

func (*List) PopBackAll

func (l *List) PopBackAll() []interface{}

PopBackAll 从 `l` 的尾部移除所有元素,并将移除的元素值作为切片返回。 md5:6fd64ee47034d8b6

Example
package main

import (
	"fmt"

	garray "github.com/888go/goframe/container/garray"
	glist "github.com/888go/goframe/container/glist"
)

func main() {
	l := glist.NewFrom(garray.X创建并按范围(1, 5, 1).X取数组())

	fmt.Println(l.Len())
	fmt.Println(l)
	fmt.Println(l.PopBackAll())
	fmt.Println(l.Len())

}
Output:
5
[1,2,3,4,5]
[5 4 3 2 1]
0

func (*List) PopBacks

func (l *List) PopBacks(max int) (values []interface{})

PopBacks 从 `l` 的末尾移除 `max` 个元素, 并将移除元素的值作为切片返回。 md5:100add87dc541cc8

Example
package main

import (
	"fmt"

	garray "github.com/888go/goframe/container/garray"
	glist "github.com/888go/goframe/container/glist"
)

func main() {
	l := glist.NewFrom(garray.X创建并按范围(1, 5, 1).X取数组())

	fmt.Println(l.Len())
	fmt.Println(l)
	fmt.Println(l.PopBacks(2))
	fmt.Println(l.Len())
	fmt.Println(l)

}
Output:
5
[1,2,3,4,5]
[5 4]
3
[1,2,3]

func (*List) PopFront

func (l *List) PopFront() (value interface{})

PopFront 从 `l` 的前端移除元素,并返回该元素的值。 md5:18dd24504d7e0084

Example
package main

import (
	"fmt"

	garray "github.com/888go/goframe/container/garray"
	glist "github.com/888go/goframe/container/glist"
)

func main() {
	l := glist.NewFrom(garray.X创建并按范围(1, 5, 1).X取数组())

	fmt.Println(l.Len())
	fmt.Println(l)
	fmt.Println(l.PopFront())
	fmt.Println(l.Len())
	fmt.Println(l)

}
Output:
5
[1,2,3,4,5]
1
4
[2,3,4,5]

func (*List) PopFrontAll

func (l *List) PopFrontAll() []interface{}

PopFrontAll 从 `l` 的前端移除所有元素,并将移除的元素值作为切片返回。 md5:b1d251b985eb6a51

Example
package main

import (
	"fmt"

	garray "github.com/888go/goframe/container/garray"
	glist "github.com/888go/goframe/container/glist"
)

func main() {
	l := glist.NewFrom(garray.X创建并按范围(1, 5, 1).X取数组())

	fmt.Println(l.Len())
	fmt.Println(l)
	fmt.Println(l.PopFrontAll())
	fmt.Println(l.Len())

}
Output:
5
[1,2,3,4,5]
[1 2 3 4 5]
0

func (*List) PopFronts

func (l *List) PopFronts(max int) (values []interface{})

PopFronts 从列表 `l` 的前面移除 `max` 个元素, 并将移除的元素值作为切片返回。 md5:cced2abc2e709a67

Example
package main

import (
	"fmt"

	garray "github.com/888go/goframe/container/garray"
	glist "github.com/888go/goframe/container/glist"
)

func main() {
	l := glist.NewFrom(garray.X创建并按范围(1, 5, 1).X取数组())

	fmt.Println(l.Len())
	fmt.Println(l)
	fmt.Println(l.PopFronts(2))
	fmt.Println(l.Len())
	fmt.Println(l)

}
Output:
5
[1,2,3,4,5]
[1 2]
3
[3,4,5]

func (*List) PushBack

func (l *List) PushBack(v interface{}) (e *Element)

PushBack 在列表 `l` 的末尾插入一个新元素 `e`,值为 `v`,并返回 `e`。 md5:7f490aef9df259d7

Example
package main

import (
	"fmt"

	garray "github.com/888go/goframe/container/garray"
	glist "github.com/888go/goframe/container/glist"
)

func main() {
	l := glist.NewFrom(garray.X创建并按范围(1, 5, 1).X取数组())

	fmt.Println(l.Len())
	fmt.Println(l)

	l.PushBack(6)

	fmt.Println(l.Len())
	fmt.Println(l)

}
Output:
5
[1,2,3,4,5]
6
[1,2,3,4,5,6]

func (*List) PushBackList

func (l *List) PushBackList(other *List)

PushBackList 在列表 `l` 的末尾插入另一个列表的副本。 列表 `l` 和 `other` 可以是相同的,但它们不能为 nil。 md5:9bb4d2888e02946d

Example
package main

import (
	"fmt"

	garray "github.com/888go/goframe/container/garray"
	glist "github.com/888go/goframe/container/glist"
	"github.com/888go/goframe/frame/g"
)

func main() {
	l := glist.NewFrom(garray.X创建并按范围(1, 5, 1).X取数组())

	fmt.Println(l.Size())
	fmt.Println(l)

	other := glist.NewFrom(g.Slice别名{6, 7, 8, 9, 10})

	fmt.Println(other.Size())
	fmt.Println(other)

	l.PushBackList(other)

	fmt.Println(l.Size())
	fmt.Println(l)

}
Output:
5
[1,2,3,4,5]
5
[6,7,8,9,10]
10
[1,2,3,4,5,6,7,8,9,10]

func (*List) PushBacks

func (l *List) PushBacks(values []interface{})

PushBacks 将多个值为 `values` 的新元素插入到列表 `l` 的末尾。 md5:8760e724a5eb555e

Example
package main

import (
	"fmt"

	garray "github.com/888go/goframe/container/garray"
	glist "github.com/888go/goframe/container/glist"
	"github.com/888go/goframe/frame/g"
)

func main() {
	l := glist.NewFrom(garray.X创建并按范围(1, 5, 1).X取数组())

	fmt.Println(l.Len())
	fmt.Println(l)

	l.PushBacks(g.Slice别名{6, 7, 8, 9, 10})

	fmt.Println(l.Len())
	fmt.Println(l)

}
Output:
5
[1,2,3,4,5]
10
[1,2,3,4,5,6,7,8,9,10]

func (*List) PushFront

func (l *List) PushFront(v interface{}) (e *Element)

PushFront 在列表 `l` 的开头插入新元素 `e`,值为 `v`,并返回 `e`。 md5:efe14f0fd31ff77b

Example
package main

import (
	"fmt"

	garray "github.com/888go/goframe/container/garray"
	glist "github.com/888go/goframe/container/glist"
)

func main() {
	l := glist.NewFrom(garray.X创建并按范围(1, 5, 1).X取数组())

	fmt.Println(l.Len())
	fmt.Println(l)

	l.PushFront(0)

	fmt.Println(l.Len())
	fmt.Println(l)

}
Output:
5
[1,2,3,4,5]
6
[0,1,2,3,4,5]

func (*List) PushFrontList

func (l *List) PushFrontList(other *List)

PushFrontList 将另一个列表 `other` 的副本插入到列表 `l` 的前端。 列表 `l` 和 `other` 可以是相同的列表,但它们都不能为空。 md5:0b7e24dd279b0ec0

Example
package main

import (
	"fmt"

	garray "github.com/888go/goframe/container/garray"
	glist "github.com/888go/goframe/container/glist"
	"github.com/888go/goframe/frame/g"
)

func main() {
	l := glist.NewFrom(garray.X创建并按范围(1, 5, 1).X取数组())

	fmt.Println(l.Size())
	fmt.Println(l)

	other := glist.NewFrom(g.Slice别名{-4, -3, -2, -1, 0})

	fmt.Println(other.Size())
	fmt.Println(other)

	l.PushFrontList(other)

	fmt.Println(l.Size())
	fmt.Println(l)

}
Output:
5
[1,2,3,4,5]
5
[-4,-3,-2,-1,0]
10
[-4,-3,-2,-1,0,1,2,3,4,5]

func (*List) PushFronts

func (l *List) PushFronts(values []interface{})

PushFronts 在列表 `l` 的前端插入多个具有值 `values` 的新元素。 md5:bd169f62b7c48e7d

Example
package main

import (
	"fmt"

	garray "github.com/888go/goframe/container/garray"
	glist "github.com/888go/goframe/container/glist"
	"github.com/888go/goframe/frame/g"
)

func main() {
	l := glist.NewFrom(garray.X创建并按范围(1, 5, 1).X取数组())

	fmt.Println(l.Len())
	fmt.Println(l)

	l.PushFronts(g.Slice别名{0, -1, -2, -3, -4})

	fmt.Println(l.Len())
	fmt.Println(l)

}
Output:
5
[1,2,3,4,5]
10
[-4,-3,-2,-1,0,1,2,3,4,5]

func (*List) RLockFunc

func (l *List) RLockFunc(f func(list *list.List))

RLockFunc 在 RWMutex.RLock 的范围内使用给定的回调函数 `f` 进行读取锁定。 md5:4ae51d9b7445f043

Example
package main

import (
	"container/list"
	"fmt"

	garray "github.com/888go/goframe/container/garray"
	glist "github.com/888go/goframe/container/glist"
)

func main() {
	// concurrent-safe list.
	l := glist.NewFrom(garray.X创建并按范围(1, 10, 1).X取数组(), true)
	// 从头开始迭代读取。 md5:325279251074c4c7
	l.RLockFunc(func(list *list.List) {
		length := list.Len()
		if length > 0 {
			for i, e := 0, list.Front(); i < length; i, e = i+1, e.Next() {
				fmt.Print(e.Value)
			}
		}
	})
	fmt.Println()
	// 从尾部开始迭代读取。 md5:dac3579ac46c0170
	l.RLockFunc(func(list *list.List) {
		length := list.Len()
		if length > 0 {
			for i, e := 0, list.Back(); i < length; i, e = i+1, e.Prev() {
				fmt.Print(e.Value)
			}
		}
	})

	fmt.Println()
}
Output:
12345678910
10987654321

func (*List) Remove

func (l *List) Remove(e *Element) (value interface{})

Remove 从列表 `l` 中移除元素 `e`,如果 `e` 是 `l` 的元素。它返回元素的值 `e.Value`。元素必须不为 nil。 md5:49dd42047b93518c

Example
package main

import (
	"fmt"

	garray "github.com/888go/goframe/container/garray"
	glist "github.com/888go/goframe/container/glist"
)

func main() {
	l := glist.NewFrom(garray.X创建并按范围(1, 5, 1).X取数组())

	fmt.Println(l.Len())
	fmt.Println(l)

	fmt.Println(l.Remove(l.Front()))
	fmt.Println(l.Remove(l.Back()))

	fmt.Println(l.Len())
	fmt.Println(l)

}
Output:
5
[1,2,3,4,5]
1
5
3
[2,3,4]

func (*List) RemoveAll

func (l *List) RemoveAll()

RemoveAll 从列表 `l` 中移除所有元素。 md5:183c16a2ab7fbbfa

Example
package main

import (
	"fmt"

	garray "github.com/888go/goframe/container/garray"
	glist "github.com/888go/goframe/container/glist"
)

func main() {
	l := glist.NewFrom(garray.X创建并按范围(1, 5, 1).X取数组())

	fmt.Println(l.Len())
	fmt.Println(l)

	l.RemoveAll()

	fmt.Println(l.Len())

}
Output:
5
[1,2,3,4,5]
0

func (*List) Removes

func (l *List) Removes(es []*Element)

Removes 从列表 `l` 中移除多个元素 `es`,前提是 `es` 是列表 `l` 的成员。 md5:19a1f18ca5d0cf06

Example
package main

import (
	"fmt"

	garray "github.com/888go/goframe/container/garray"
	glist "github.com/888go/goframe/container/glist"
)

func main() {
	l := glist.NewFrom(garray.X创建并按范围(1, 5, 1).X取数组())

	fmt.Println(l.Len())
	fmt.Println(l)

	l.Removes([]*glist.Element{l.Front(), l.Back()})

	fmt.Println(l.Len())
	fmt.Println(l)

}
Output:
5
[1,2,3,4,5]
3
[2,3,4]

func (*List) Size

func (l *List) Size() int

Size is alias of Len.

Example
package main

import (
	"fmt"

	glist "github.com/888go/goframe/container/glist"
	"github.com/888go/goframe/frame/g"
)

func main() {
	l := glist.NewFrom(g.Slice别名{1, 2, 3, 4, 5})

	fmt.Println(l.Size())

}
Output:
5

func (*List) String

func (l *List) String() string

String 将当前列表作为字符串返回。 md5:e5f56499b5c2f331

func (*List) UnmarshalJSON

func (l *List) UnmarshalJSON(b []byte) error

UnmarshalJSON实现了json.Unmarshal接口的UnmarshalJSON方法。 md5:f6766b88cf3d63c2

func (*List) UnmarshalValue

func (l *List) UnmarshalValue(value interface{}) (err error)

UnmarshalValue 是一个接口实现,用于将任何类型的价值设置到列表中。 md5:a6e906ab9decb788

func (*List) X遍历

func (l *List) X遍历(f func(e *Element) bool)

X遍历 是 IteratorAsc 的别名。 md5:1bfdea306db62845

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL