GoFrame glist 基礎使用和自定義遍歷
基礎概念
GoFrame框架(下文簡稱gf)提供的數據類型,比如:字典gmap、數組garray、集合gset、隊列gqueue、樹形結構gtree、鏈表glist都是支持設置並發安全開關的。
支持設置並發安全開關這也是gf提供的常用數據類型和原生數據類型非常重要的區別
今天和大傢分享gf框架的glist詳解:
基本使用
glist的使用場景是:雙向鏈表
- 通過PushBack向鏈表尾部插入數據
- 通過PushFront向鏈表頭部插入數據
- 通過InsertBefore向指定位置前插入數據
- 通過InsertAfter向指定位置後插入數據
- 通過PopBacks從尾部取出數據
- 通過PopFronts從頭部取出數據
package main import ( "github.com/gogf/gf/container/glist" "github.com/gogf/gf/frame/g" ) func main() { //帶並發安全開關的雙向鏈表 l := glist.New() //push方法 l.PushBack(1) l.PushBack(2) e := l.PushFront(0) g.Dump("l的值:", l) //l的值:"[0,1,2]" //insert添加方法 l.InsertBefore(e, -1) g.Dump("insert之後的值:", l) //insert之後的值:"[-1,0,1,2]" l.InsertAfter(e, 0.2) g.Dump("InsertAfter之後:", l) //InsertAfter之後:"[-1,0,0.2,1,2]" //pop l.PopBacks(1) g.Dump("PopBacks之後:", l) //PopBacks之後:"[-1,0,0.2,1]" 即彈出瞭最後一個值 l.PopFronts(1) g.Dump("PopFronts之後:", l) //PopFronts之後:"[0,0.2,1]" 即彈出瞭最前面的一個值 }
打印結果
glist鏈表遍歷
鏈表的遍歷是常用的場景
- 我們可以通過原生方法IteratorAsc實現正序遍歷
- 可以通過原生方法IteratorDesc實現倒序遍歷
當然瞭,我們也可以自定義遍歷規則 比如我們可以通過讀鎖和寫鎖遍歷一個並發安全的鏈表 下方代碼塊標註瞭明確的註釋。
package main import ( "container/list" "fmt" "github.com/gogf/gf/container/garray" "github.com/gogf/gf/container/glist" ) func main() { l := glist.NewFrom(garray.NewArrayRange(0, 10, 1).Slice(), true) // 正序遍歷 l.IteratorAsc(func(e *glist.Element) bool { fmt.Print(e.Value) //結果:012345678910 return true }) fmt.Println() // 倒序遍歷 l.IteratorDesc(func(e *glist.Element) bool { fmt.Print(e.Value) //結果:109876543210 return true }) fmt.Println() //自定義方法 實現正序遍歷 l.RLockFunc(func(list *list.List) { if list.Len() > 0 { for i, e := 0, list.Front(); i < list.Len(); i, e = i+1, e.Next() { fmt.Print(e.Value) //012345678910 } } }) fmt.Println() // 自定義方法 實現倒序遍歷 l.RLockFunc(func(list *list.List) { if list.Len() > 0 { for i, e := 0, list.Back(); i < list.Len(); i, e = i+1, e.Prev() { fmt.Print(e.Value) //109876543210 } } }) fmt.Println() }
打印結果
小技巧
下面分享一些我在使用中的小技巧
join
通過join處理成逗號分隔的字符串
var l glist.List l.PushBacks(g.Slice{"a", "b", "c"}) fmt.Println(l.Join(","))
打印結果
a,b,c
序列化和反序列化
呼應一下開頭提到的:支持設置並發安全開關是gf提供的常用數據類型和原生數據類型非常重要的區別
gf提供的數據類型都支持序列化和反序列化就是另外一個重要特點瞭。
總結
通過這篇文章,我們瞭解到:
- gf框架提供的數據結構,比如:字典gmap、數組garray、集合gset、隊列gqueue、樹形結構gtree、鏈表glist都是支持設置並發安全開關的;而且都支持序列化和反序列化,實現瞭標準庫json數據格式的序列化/反序列化接口。
- 學習到瞭glist的基礎使用以及如何自定義遍歷取值。
以上就是GoFrame glist 基礎使用和自定義遍歷的詳細內容,更多關於GoFrame glist自定義遍歷的資料請關註WalkonNet其它相關文章!
推薦閱讀:
- GoFrame框架garray對比PHP的array優勢
- GoFrame框架gset使用對比PHP Java Redis優勢
- goFrame的隊列gqueue對比channel使用詳解
- GoFrame gtree樹形結構的使用技巧示例
- GoFrame框架gredis優雅的取值和類型轉換