91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

GoFrame?glist怎么使用和自定義遍歷

發布時間:2022-06-10 09:25:24 來源:億速云 閱讀:154 作者:iii 欄目:開發技術

本文小編為大家詳細介紹“GoFrame glist怎么使用和自定義遍歷”,內容詳細,步驟清晰,細節處理妥當,希望這篇“GoFrame glist怎么使用和自定義遍歷”文章能幫助大家解決疑惑,下面跟著小編的思路慢慢深入,一起來學習新知識吧。

基礎概念

GoFrame框架(下文簡稱gf)提供的數據類型,比如:字典gmap、數組garray、集合gset、隊列gqueue、樹形結構gtree、鏈表glist都是支持設置并發安全開關的。

支持設置并發安全開關這也是gf提供的常用數據類型和原生數據類型非常重要的區別

基本使用

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]" 即彈出了最前面的一個值
}

打印結果

GoFrame?glist怎么使用和自定義遍歷

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()
}

打印結果

GoFrame?glist怎么使用和自定義遍歷

小技巧

下面分享一些我在使用中的小技巧

join

通過join處理成逗號分隔的字符串

    var l glist.List
    l.PushBacks(g.Slice{"a", "b", "c"})
    fmt.Println(l.Join(","))

打印結果

a,b,c

序列化和反序列化

呼應一下開頭提到的:支持設置并發安全開關是gf提供的常用數據類型和原生數據類型非常重要的區別

gf提供的數據類型都支持序列化和反序列化就是另外一個重要特點了。

讀到這里,這篇“GoFrame glist怎么使用和自定義遍歷”文章已經介紹完畢,想要掌握這篇文章的知識點還需要大家自己動手實踐使用過才能領會,如果想了解更多相關內容的文章,歡迎關注億速云行業資訊頻道。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

土默特左旗| 海门市| 沂源县| 永年县| 曲阳县| 策勒县| 甘孜县| 余江县| 读书| 确山县| 孟津县| 观塘区| 年辖:市辖区| 永寿县| 武陟县| 金塔县| 永嘉县| 简阳市| 女性| 常山县| 德惠市| 叙永县| 西畴县| 会宁县| 辉县市| 莒南县| 周口市| 仙游县| 东阳市| 波密县| 九寨沟县| 田阳县| 郎溪县| 静安区| 尖扎县| 景宁| 贵港市| 即墨市| 文安县| 醴陵市| 烟台市|