文章來源:https://goframe.org/container/garray/index
garray
數(shù)組容器钾虐,提供普通數(shù)組噪窘,及排序數(shù)組,支持?jǐn)?shù)據(jù)項(xiàng)唯一性矯正效扫,支持可選的并發(fā)安全參數(shù)控制倔监。
使用場(chǎng)景:
數(shù)組操作。
使用方式:
import "github.com/gogf/gf/g/container/garray"
接口文檔:
https://godoc.org/github.com/gogf/gf/g/container/garray
func New(unsafe ...bool) *Array
func NewArray(unsafe ...bool) *Array
func NewArrayFrom(array []interface{}, unsafe ...bool) *Array
func NewArrayFromCopy(array []interface{}, unsafe ...bool) *Array
func NewArraySize(size int, cap int, unsafe ...bool) *Array
func NewFrom(array []interface{}, unsafe ...bool) *Array
func NewFromCopy(array []interface{}, unsafe ...bool) *Array
func (a *Array) Append(value ...interface{}) *Array
func (a *Array) Chunk(size int) [][]interface{}
func (a *Array) Clear() *Array
func (a *Array) Clone() (newArray *Array)
func (a *Array) Contains(value interface{}) bool
func (a *Array) CountValues() map[interface{}]int
func (a *Array) Fill(startIndex int, num int, value interface{}) *Array
func (a *Array) Get(index int) interface{}
func (a *Array) InsertAfter(index int, value interface{}) *Array
func (a *Array) InsertBefore(index int, value interface{}) *Array
func (a *Array) Join(glue string) string
func (a *Array) Len() int
func (a *Array) LockFunc(f func(array []interface{})) *Array
func (a *Array) Merge(array interface{}) *Array
func (a *Array) Pad(size int, val interface{}) *Array
func (a *Array) PopLeft() interface{}
func (a *Array) PopLefts(size int) []interface{}
func (a *Array) PopRand() interface{}
func (a *Array) PopRands(size int) []interface{}
func (a *Array) PopRight() interface{}
func (a *Array) PopRights(size int) []interface{}
func (a *Array) PushLeft(value ...interface{}) *Array
func (a *Array) PushRight(value ...interface{}) *Array
func (a *Array) RLockFunc(f func(array []interface{})) *Array
func (a *Array) Rand() interface{}
func (a *Array) Rands(size int) []interface{}
func (a *Array) Range(start, end int) []interface{}
func (a *Array) Remove(index int) interface{}
func (a *Array) Replace(array []interface{}) *Array
func (a *Array) Reverse() *Array
func (a *Array) Search(value interface{}) int
func (a *Array) Set(index int, value interface{}) *Array
func (a *Array) SetArray(array []interface{}) *Array
func (a *Array) Shuffle() *Array
func (a *Array) Slice() []interface{}
func (a *Array) SortFunc(less func(v1, v2 interface{}) bool) *Array
func (a *Array) String() string
func (a *Array) SubSlice(offset, size int) []interface{}
func (a *Array) Sum() (sum int)
func (a *Array) Unique() *Array
由于garray
模塊下的對(duì)象及方法較多菌仁,支持int
/string
/interface{}
三種數(shù)據(jù)類型浩习,這里便不一一列舉。garray
下包含了多種數(shù)據(jù)類型的slice
济丘,可以使用 garray.New*Array
/garray.NewSorted*Array
方法來創(chuàng)建谱秽,其中garray.New*Array
為普通不排序數(shù)組,garray.NewSorted*Array
為排序數(shù)組(當(dāng)創(chuàng)建interface{}
類型的數(shù)組時(shí)摹迷,創(chuàng)建時(shí)可以指定自定義的排序函數(shù))疟赊。
使用示例1,普通數(shù)組
package main
import (
"fmt"
"github.com/gogf/gf/g/container/garray"
)
func main () {
// 創(chuàng)建普通的int類型數(shù)組峡碉,并關(guān)閉默認(rèn)的并發(fā)安全特性
a := garray.NewIntArray(true)
// 添加數(shù)據(jù)項(xiàng)
for i := 0; i < 10; i++ {
a.Append(i)
}
// 獲取當(dāng)前數(shù)組長(zhǎng)度
fmt.Println(a.Len())
// 獲取當(dāng)前數(shù)據(jù)項(xiàng)列表
fmt.Println(a.Slice())
// 獲取指定索引項(xiàng)
fmt.Println(a.Get(6))
// 在指定索引前插入數(shù)據(jù)項(xiàng)
a.InsertAfter(9, 11)
// 在指定索引后插入數(shù)據(jù)項(xiàng)
a.InsertBefore(10, 10)
fmt.Println(a.Slice())
// 修改指定索引的數(shù)據(jù)項(xiàng)
a.Set(0, 100)
fmt.Println(a.Slice())
// 搜索數(shù)據(jù)項(xiàng)近哟,返回搜索到的索引位置
fmt.Println(a.Search(5))
// 刪除指定索引的數(shù)據(jù)項(xiàng)
a.Remove(0)
fmt.Println(a.Slice())
// 并發(fā)安全,寫鎖操作
a.LockFunc(func(array []int) {
// 將末尾項(xiàng)改為100
array[len(array) - 1] = 100
})
// 并發(fā)安全鲫寄,讀鎖操作
a.RLockFunc(func(array []int) {
fmt.Println(array[len(array) - 1])
})
// 清空數(shù)組
fmt.Println(a.Slice())
a.Clear()
fmt.Println(a.Slice())
}
執(zhí)行后吉执,輸出結(jié)果為:
10
[0 1 2 3 4 5 6 7 8 9]
6
[0 1 2 3 4 5 6 7 8 9 10 11]
[100 1 2 3 4 5 6 7 8 9 10 11]
5
[1 2 3 4 5 6 7 8 9 10 11]
100
[1 2 3 4 5 6 7 8 9 10 100]
[]
使用示例2疯淫,排序數(shù)組
排序數(shù)組的方法與普通數(shù)組類似,但是帶有自動(dòng)排序功能及唯一性過濾功能戳玫。
package main
import (
"fmt"
"github.com/gogf/gf/g/container/garray"
)
func main () {
// 自定義排序數(shù)組熙掺,降序排序(SortedIntArray管理的數(shù)據(jù)是升序)
a := garray.NewSortedArray(func(v1, v2 interface{}) int {
if v1.(int) < v2.(int) {
return 1
}
if v1.(int) > v2.(int) {
return -1
}
return 0
})
// 添加數(shù)據(jù)
a.Add(2)
a.Add(3)
a.Add(1)
fmt.Println(a.Slice())
// 添加重復(fù)數(shù)據(jù)
a.Add(3)
fmt.Println(a.Slice())
// 檢索數(shù)據(jù),返回最后對(duì)比的索引位置咕宿,檢索結(jié)果
// 檢索結(jié)果:0: 匹配; <0:參數(shù)小于對(duì)比值; >0:參數(shù)大于對(duì)比值
fmt.Println(a.Search(1))
// 設(shè)置不可重復(fù)
a.SetUnique(true)
fmt.Println(a.Slice())
a.Add(1)
fmt.Println(a.Slice())
}
執(zhí)行后币绩,輸出結(jié)果:
[3 2 1]
[3 3 2 1]
3 0
[3 2 1]
[3 2 1]