W3Cschool
恭喜您成為首批注冊(cè)用戶
獲得88經(jīng)驗(yàn)值獎(jiǎng)勵(lì)
以下常用方法列表,文檔更新可能滯后于代碼新特性,更多的方法及示例請(qǐng)參考代碼文檔:https://pkg.go.dev/github.com/gogf/gf/v2/container/gring
New
?創(chuàng)建并返回?cap
?元素的環(huán)形結(jié)構(gòu)??蛇x參數(shù)?safe
?指定是否在并發(fā)安全中使用此結(jié)構(gòu),默認(rèn)情況下為?false
?。New(cap int, safe ...bool) *Ring
func ExampleNew() {
// Non concurrent safety
gring.New(10)
// Concurrent safety
gring.New(10, true)
// Output:
}
Val
?返回當(dāng)前位置的值。Val() interface{}
func ExampleRing_Val() {
r := gring.New(10)
r.Set(1)
fmt.Println("Val:", r.Val())
r.Next().Set("GoFrame")
fmt.Println("Val:", r.Val())
// Output:
// Val: 1
// Val: GoFrame
}
Len
?返回?Ring
?的大小。Len() int
func ExampleRing_Len() {
r1 := gring.New(10)
for i := 0; i < 5; i++ {
r1.Set(i).Next()
}
fmt.Println("Len:", r1.Len())
r2 := gring.New(10, true)
for i := 0; i < 10; i++ {
r2.Set(i).Next()
}
fmt.Println("Len:", r2.Len())
// Output:
// Len: 5
// Len: 10
}
Cap
?返回?Ring
?的容量。Cap() int
func ExampleRing_Cap() {
r1 := gring.New(10)
for i := 0; i < 5; i++ {
r1.Set(i).Next()
}
fmt.Println("Cap:", r1.Cap())
r2 := gring.New(10, true)
for i := 0; i < 10; i++ {
r2.Set(i).Next()
}
fmt.Println("Cap:", r2.Cap())
// Output:
// Cap: 10
// Cap: 10
}
Set
?將為當(dāng)前位置的值設(shè)置為?Value
?。Set(value interface{}) *Ring
func ExampleRing_Set() {
r := gring.New(10)
r.Set(1)
fmt.Println("Val:", r.Val())
r.Next().Set("GoFrame")
fmt.Println("Val:", r.Val())
// Output:
// Val: 1
// Val: GoFrame
}
Put
?將為當(dāng)前位置的值設(shè)置為?Value
?,并將?ring
?移動(dòng)到下一個(gè)位置。Put(value interface{}) *Ring
func ExampleRing_Put() {
r := gring.New(10)
r.Put(1)
fmt.Println("Val:", r.Val())
fmt.Println("Val:", r.Prev().Val())
// Output:
// Val: <nil>
// Val: 1
}
n % r.Len()
?個(gè)節(jié)點(diǎn),并返回移動(dòng)后指向的位置。當(dāng)n>=0時(shí),為正向移動(dòng),反之為反向移動(dòng)。Move(n int) *Ring
func ExampleRing_Move() {
r := gring.New(10)
for i := 0; i < 10; i++ {
r.Set(i).Next()
}
// ring at Pos 0
fmt.Println("CurVal:", r.Val())
r.Move(5)
// ring at Pos 5
fmt.Println("CurVal:", r.Val())
// Output:
// CurVal: 0
// CurVal: 5
}
Prev
?返回?ring
?上一個(gè)位置的元素。Prev() *Ring
func ExampleRing_Prev() {
r := gring.New(10)
for i := 0; i < 5; i++ {
r.Set(i).Next()
}
fmt.Println("Prev:", r.Prev().Val())
fmt.Println("Prev:", r.Prev().Val())
// Output:
// Prev: 4
// Prev: 3
}
Next
?返回?ring
?下一個(gè)位置的元素。Next() *Ring
func ExampleRing_Next() {
r := gring.New(10)
for i := 5; i > 0; i-- {
r.Set(i).Prev()
}
fmt.Println("Prev:", r.Next().Val())
fmt.Println("Prev:", r.Next().Val())
// Output:
// Prev: 1
// Prev: 2
}
Link
?將?ring r
?與?ring s
?連接起來,使?r.Next()
?變?yōu)?s
?并返回?r.Next()
?的原始值。?r
?不能為空。?Link
?后,?ring r
?的?Len
?和?Cap
?會(huì)變?yōu)樵?r
?和?s
?的?Len
?和?Cap
?之和。r
?和?s
?指向同一個(gè)?ring
?,則連接它們將從?ring
?中刪除?r
?和?s
?之間的元素。移除的元素形成一個(gè)子?ring
?,結(jié)果是對(duì)該子?ring
?的引用(如果沒有移除任何元素,則結(jié)果仍然是?r.Next()
?的原始值,而不是?nil
?)。r
?和?s
?指向不同的?ring
?,則連接它們將創(chuàng)建一個(gè)?ring
?,其中?s
?的元素插入?r
?之后。結(jié)果指向插入后?s
?的最后一個(gè)元素后面的元素。(r *Ring) Link(s *Ring) *Ring
func ExampleRing_Link_Common() {
r := gring.New(10)
for i := 0; i < 5; i++ {
r.Set(i).Next()
}
s := gring.New(10)
for i := 0; i < 10; i++ {
val := i + 5
s.Set(val).Next()
}
r.Link(s) // Link Ring s to Ring r
fmt.Println("Len:", r.Len())
fmt.Println("Cap:", r.Cap())
fmt.Println(r.SlicePrev())
fmt.Println(r.SliceNext())
// Output:
// Len: 15
// Cap: 20
// [4 3 2 1 0]
// [5 6 7 8 9 10 11 12 13 14]
}
func ExampleRing_Link_SameRing() {
r := gring.New(10)
for i := 0; i < 5; i++ {
r.Set(i).Next()
}
same_r := r.Link(r.Prev())
fmt.Println("Len:", same_r.Len())
fmt.Println("Cap:", same_r.Cap())
fmt.Println(same_r.SlicePrev())
fmt.Println(same_r.SliceNext())
// Output:
// Len: 1
// Cap: 1
// [4]
// [4]
}
Unlink
?從?r.next()
?開始,從?ring
?中刪除?n % r.len()
?個(gè)元素。如果?n % r.len() == 0
?,則?ring
?保持不變。返回值為刪除的?subring
?。
Set(value interface{}) *Ring
func ExampleRing_Unlink() {
r := gring.New(10)
for i := 0; i < 10; i++ {
r.Set(i).Next()
}
fmt.Println("Before Unlink, Len:", r.Len())
fmt.Println("Before Unlink, Cap:", r.Cap())
fmt.Println("Before Unlink, ", r.SlicePrev())
fmt.Println("Before Unlink, ", r.SliceNext())
r.Unlink(7)
fmt.Println("After Unlink, Len:", r.Len())
fmt.Println("After Unlink, Cap:", r.Cap())
fmt.Println("After Unlink, ", r.SlicePrev())
fmt.Println("After Unlink, ", r.SliceNext())
// Output:
// Before Unlink, Len: 10
// Before Unlink, Cap: 10
// Before Unlink, [0 9 8 7 6 5 4 3 2 1]
// Before Unlink, [0 1 2 3 4 5 6 7 8 9]
// After Unlink, Len: 7
// After Unlink, Cap: 7
// After Unlink, [1 7 6 5 4 3 2]
// After Unlink, [1 2 3 4 5 6 7]
}
RLockIteratorNext
?在?RWMutex.RLock
?中迭代的回調(diào)給定的?func f
?進(jìn)行正向讀取。如果?fun f
?返回?true
?,則繼續(xù)迭代;如果返回?false
?則停止。
RLockIteratorNext(f func(value interface{}) bool)
func ExampleRing_RLockIteratorNext() {
r := gring.New(10)
for i := 0; i < 10; i++ {
r.Set(i).Next()
}
r.RLockIteratorNext(func(value interface{}) bool {
if value.(int) < 5 {
fmt.Println("IteratorNext Success, Value:", value)
return true
}
return false
})
// Output:
// IteratorNext Success, Value: 0
// IteratorNext Success, Value: 1
// IteratorNext Success, Value: 2
// IteratorNext Success, Value: 3
// IteratorNext Success, Value: 4
}
RLockIteratorPrev
?在?RWMutex.RLock
?中迭代的回調(diào)給定的?func f
?進(jìn)行反向讀取。如果?fun f
?返回?true
?,則繼續(xù)迭代;如果返回?false
?則停止。
RLockIteratorPrev(f func(value interface{}) bool)
func ExampleRing_RLockIteratorPrev() {
r := gring.New(10)
for i := 0; i < 10; i++ {
r.Set(i).Next()
}
// move r to pos 9
r.Prev()
r.RLockIteratorPrev(func(value interface{}) bool {
if value.(int) >= 5 {
fmt.Println("IteratorPrev Success, Value:", value)
return true
}
return false
})
// Output:
// IteratorPrev Success, Value: 9
// IteratorPrev Success, Value: 8
// IteratorPrev Success, Value: 7
// IteratorPrev Success, Value: 6
// IteratorPrev Success, Value: 5
}
SliceNext
?以?slice
?的形式返回從當(dāng)前位置向后所有元素的值的副本。
SliceNext() []interface{}
func ExampleRing_SliceNext() {
r := gring.New(10)
for i := 0; i < 10; i++ {
r.Set(i).Next()
}
fmt.Println(r.SliceNext())
// Output:
// [0 1 2 3 4 5 6 7 8 9]
}
SlicePrev
?以?slice
?的形式返回從當(dāng)前位置向前所有元素的值的副本。
SlicePrev() []interface{}
func ExampleRing_SlicePrev() {
r := gring.New(10)
for i := 0; i < 10; i++ {
r.Set(i).Next()
}
fmt.Println(r.SlicePrev())
// Output:
// [0 9 8 7 6 5 4 3 2 1]
}
Copyright©2021 w3cschool編程獅|閩ICP備15016281號(hào)-3|閩公網(wǎng)安備35020302033924號(hào)
違法和不良信息舉報(bào)電話:173-0602-2364|舉報(bào)郵箱:jubao@eeedong.com
掃描二維碼
下載編程獅App
編程獅公眾號(hào)
聯(lián)系方式:
更多建議: