Golang數(shù)組操作 - garray

文章來源: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]
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市荠列,隨后出現(xiàn)的幾起案子类浪,更是在濱河造成了極大的恐慌载城,老刑警劉巖肌似,帶你破解...
    沈念sama閱讀 221,198評(píng)論 6 514
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異诉瓦,居然都是意外死亡川队,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,334評(píng)論 3 398
  • 文/潘曉璐 我一進(jìn)店門睬澡,熙熙樓的掌柜王于貴愁眉苦臉地迎上來固额,“玉大人,你說我怎么就攤上這事煞聪《孵铮” “怎么了?”我有些...
    開封第一講書人閱讀 167,643評(píng)論 0 360
  • 文/不壞的土叔 我叫張陵昔脯,是天一觀的道長(zhǎng)啄糙。 經(jīng)常有香客問我,道長(zhǎng)云稚,這世上最難降的妖魔是什么隧饼? 我笑而不...
    開封第一講書人閱讀 59,495評(píng)論 1 296
  • 正文 為了忘掉前任,我火速辦了婚禮静陈,結(jié)果婚禮上燕雁,老公的妹妹穿的比我還像新娘。我一直安慰自己鲸拥,他們只是感情好拐格,可當(dāng)我...
    茶點(diǎn)故事閱讀 68,502評(píng)論 6 397
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著刑赶,像睡著了一般捏浊。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上角撞,一...
    開封第一講書人閱讀 52,156評(píng)論 1 308
  • 那天呛伴,我揣著相機(jī)與錄音勃痴,去河邊找鬼。 笑死热康,一個(gè)胖子當(dāng)著我的面吹牛沛申,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播姐军,決...
    沈念sama閱讀 40,743評(píng)論 3 421
  • 文/蒼蘭香墨 我猛地睜開眼铁材,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來了奕锌?” 一聲冷哼從身側(cè)響起著觉,我...
    開封第一講書人閱讀 39,659評(píng)論 0 276
  • 序言:老撾萬榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎惊暴,沒想到半個(gè)月后饼丘,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 46,200評(píng)論 1 319
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡辽话,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,282評(píng)論 3 340
  • 正文 我和宋清朗相戀三年肄鸽,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片油啤。...
    茶點(diǎn)故事閱讀 40,424評(píng)論 1 352
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡典徘,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出益咬,到底是詐尸還是另有隱情逮诲,我是刑警寧澤,帶...
    沈念sama閱讀 36,107評(píng)論 5 349
  • 正文 年R本政府宣布幽告,位于F島的核電站梅鹦,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏评腺。R本人自食惡果不足惜帘瞭,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,789評(píng)論 3 333
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望蒿讥。 院中可真熱鬧蝶念,春花似錦、人聲如沸芋绸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,264評(píng)論 0 23
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽摔敛。三九已至廷蓉,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間马昙,已是汗流浹背桃犬。 一陣腳步聲響...
    開封第一講書人閱讀 33,390評(píng)論 1 271
  • 我被黑心中介騙來泰國(guó)打工刹悴, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人攒暇。 一個(gè)月前我還...
    沈念sama閱讀 48,798評(píng)論 3 376
  • 正文 我出身青樓土匀,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親形用。 傳聞我的和親對(duì)象是個(gè)殘疾皇子就轧,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,435評(píng)論 2 359

推薦閱讀更多精彩內(nèi)容

  • 基礎(chǔ)篇NumPy的主要對(duì)象是同種元素的多維數(shù)組。這是一個(gè)所有的元素都是一種類型田度、通過一個(gè)正整數(shù)元組索引的元素表格(...
    oyan99閱讀 5,133評(píng)論 0 18
  • 第一部分 HTML&CSS整理答案 1. 什么是HTML5妒御? 答:HTML5是最新的HTML標(biāo)準(zhǔn)。 注意:講述HT...
    kismetajun閱讀 27,512評(píng)論 1 45
  • 國(guó)家電網(wǎng)公司企業(yè)標(biāo)準(zhǔn)(Q/GDW)- 面向?qū)ο蟮挠秒娦畔?shù)據(jù)交換協(xié)議 - 報(bào)批稿:20170802 前言: 排版 ...
    庭說閱讀 11,002評(píng)論 6 13
  • 對(duì)象的創(chuàng)建與銷毀 Item 1: 使用static工廠方法镇饺,而不是構(gòu)造函數(shù)創(chuàng)建對(duì)象:僅僅是創(chuàng)建對(duì)象的方法乎莉,并非Fa...
    孫小磊閱讀 1,990評(píng)論 0 3
  • JAVA面試題 1、作用域public,private,protected,以及不寫時(shí)的區(qū)別答:區(qū)別如下:作用域 ...
    JA尐白閱讀 1,157評(píng)論 1 0