Documentation
¶
Overview ¶
包glist提供了最常见的双链表容器,同时也支持并发安全/不安全切换功能。 md5:0b7229b4fa0fbb49
Index ¶
- type Element
- type List
- func (l *List) Back() (e *Element)
- func (l *List) BackAll() (values []interface{})
- func (l *List) BackValue() (value interface{})
- func (l *List) Clear()
- func (l *List) DeepCopy() interface{}
- func (l *List) Front() (e *Element)
- func (l *List) FrontAll() (values []interface{})
- func (l *List) FrontValue() (value interface{})
- func (l *List) InsertAfter(p *Element, v interface{}) (e *Element)
- func (l *List) InsertBefore(p *Element, v interface{}) (e *Element)
- func (l *List) IteratorAsc(f func(e *Element) bool)
- func (l *List) IteratorDesc(f func(e *Element) bool)
- func (l *List) Join(glue string) string
- func (l *List) Len() (length int)
- func (l *List) LockFunc(f func(list *list.List))
- func (l List) MarshalJSON() ([]byte, error)
- func (l *List) MoveAfter(e, p *Element)
- func (l *List) MoveBefore(e, p *Element)
- func (l *List) MoveToBack(e *Element)
- func (l *List) MoveToFront(e *Element)
- func (l *List) PopBack() (value interface{})
- func (l *List) PopBackAll() []interface{}
- func (l *List) PopBacks(max int) (values []interface{})
- func (l *List) PopFront() (value interface{})
- func (l *List) PopFrontAll() []interface{}
- func (l *List) PopFronts(max int) (values []interface{})
- func (l *List) PushBack(v interface{}) (e *Element)
- func (l *List) PushBackList(other *List)
- func (l *List) PushBacks(values []interface{})
- func (l *List) PushFront(v interface{}) (e *Element)
- func (l *List) PushFrontList(other *List)
- func (l *List) PushFronts(values []interface{})
- func (l *List) RLockFunc(f func(list *list.List))
- func (l *List) Remove(e *Element) (value interface{})
- func (l *List) RemoveAll()
- func (l *List) Removes(es []*Element)
- func (l *List) Size() int
- func (l *List) String() string
- func (l *List) UnmarshalJSON(b []byte) error
- func (l *List) UnmarshalValue(value interface{}) (err error)
- func (l *List) X遍历(f func(e *Element) bool)
Examples ¶
- List.Back
- List.BackAll
- List.BackValue
- List.Front
- List.FrontAll
- List.FrontValue
- List.InsertAfter
- List.InsertBefore
- List.IteratorAsc
- List.IteratorDesc
- List.Join
- List.Len
- List.LockFunc
- List.MoveAfter
- List.MoveBefore
- List.MoveToBack
- List.MoveToFront
- List.PopBack
- List.PopBackAll
- List.PopBacks
- List.PopFront
- List.PopFrontAll
- List.PopFronts
- List.PushBack
- List.PushBackList
- List.PushBacks
- List.PushFront
- List.PushFrontList
- List.PushFronts
- List.RLockFunc
- List.Remove
- List.RemoveAll
- List.Removes
- List.Size
- New
- NewFrom
Constants ¶
This section is empty.
Variables ¶
This section is empty.
Functions ¶
This section is empty.
Types ¶
type List ¶
type List struct {
// contains filtered or unexported fields
}
List是一个包含并发安全/不安全切换的双向链表。初始化时应设置该开关,并且之后不能更改。 md5:54c981e147e0a03a
func New ¶
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 ¶
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 ¶
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) DeepCopy ¶
func (l *List) DeepCopy() interface{}
DeepCopy实现当前类型的深拷贝接口。 md5:9cfbcb08109f6ce1
func (*List) Front ¶
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 ¶
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 ¶
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 ¶
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 ¶
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 ¶
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 ¶
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 ¶
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 ¶
MarshalJSON 实现了接口 MarshalJSON 以供 json.Marshal 使用。 md5:43c3b36e60a18f9a
func (*List) MoveAfter ¶
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 ¶
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 ¶
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 ¶
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 ¶
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 ¶
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 ¶
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 ¶
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 ¶
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 ¶
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 ¶
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 ¶
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 ¶
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 ¶
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) UnmarshalJSON ¶
UnmarshalJSON实现了json.Unmarshal接口的UnmarshalJSON方法。 md5:f6766b88cf3d63c2
func (*List) UnmarshalValue ¶
UnmarshalValue 是一个接口实现,用于将任何类型的价值设置到列表中。 md5:a6e906ab9decb788