日本综合一区二区|亚洲中文天堂综合|日韩欧美自拍一区|男女精品天堂一区|欧美自拍第6页亚洲成人精品一区|亚洲黄色天堂一区二区成人|超碰91偷拍第一页|日韩av夜夜嗨中文字幕|久久蜜综合视频官网|精美人妻一区二区三区

RELATEED CONSULTING
相關(guān)咨詢
選擇下列產(chǎn)品馬上在線溝通
服務(wù)時間:8:30-17:00
你可能遇到了下面的問題
關(guān)閉右側(cè)工具欄

新聞中心

這里有您想知道的互聯(lián)網(wǎng)營銷解決方案
創(chuàng)新互聯(lián)GoFrame教程:GoFramegtree-方法介紹

以下常用方法列表,文檔更新可能滯后于代碼新特性,更多的方法及示例請參考代碼文檔:https://pkg.GO.dev/github.com/gogf/gf/v2/container/gtree

NewBTree

  • 說明:?NewBTree?使用?m?(最大子節(jié)點數(shù)量)和自定義的比較方法創(chuàng)建?BTree?。參數(shù)?safe?用于指定是否使用并發(fā)安全的?tree?,默認情況下為?false?。
  • 注意:參數(shù)?m?必須大于等于3,否則會?panic?。
  • 格式:
NewBTree(m int, comparator func(v1, v2 interface{}) int, safe ...bool) *BTree
  • 示例:
func ExampleNewBTree() {
	bTree := gtree.NewBTree(3, gutil.ComparatorString)
	for i := 0; i < 6; i++ {
		bTree.Set("key"+gconv.String(i), "val"+gconv.String(i))
	}
	fmt.Println(bTree.Map())

	// Output:
	// map[key0:val0 key1:val1 key2:val2 key3:val3 key4:val4 key5:val5]
}

NewBTreeFrom

  • 說明:?NewBTreeFrom?使用?m?(最大子節(jié)點數(shù)量),自定義的比較方法和類型為?map[interface{}]interface{}?的?data?創(chuàng)建?BTree?。參數(shù)?safe?用于指定是否使用并發(fā)安全的?tree?,默認情況下為?false?。
  • 注意:參數(shù)?m?必須大于等于3,否則會?panic?。
  • 格式:
NewBTreeFrom(m int, comparator func(v1, v2 interface{}) int, data map[interface{}]interface{}, safe ...bool) *BTree
  • 示例:
func ExampleNewBTreeFrom() {
	bTree := gtree.NewBTree(3, gutil.ComparatorString)
	for i := 0; i < 6; i++ {
		bTree.Set("key"+gconv.String(i), "val"+gconv.String(i))
	}

	otherBTree := gtree.NewBTreeFrom(3, gutil.ComparatorString, bTree.Map())
	fmt.Println(otherBTree.Map())

	// Output:
	// map[key0:val0 key1:val1 key2:val2 key3:val3 key4:val4 key5:val5]
}

Clone

  • 說明:?clone?返回一個值為當前?tree?值的副本的新?BTree?。
  • 格式:
Clone() *BTree
  • 示例:
func ExampleBTree_Clone() {
	b := gtree.NewBTree(3, gutil.ComparatorString)
	for i := 0; i < 6; i++ {
		b.Set("key"+gconv.String(i), "val"+gconv.String(i))
	}

	tree := b.Clone()

	fmt.Println(tree.Map())
	fmt.Println(tree.Size())

	// Output:
	// map[key0:val0 key1:val1 key2:val2 key3:val3 key4:val4 key5:val5]
	// 6
}

Set

  • 說明:?Set?為?tree?設(shè)置?key/value?。
  • 格式:
Set(key interface{}, value interface{})
  • 示例:
func ExampleBTree_Set() {
	tree := gtree.NewBTree(3, gutil.ComparatorString)
	for i := 0; i < 6; i++ {
		tree.Set("key"+gconv.String(i), "val"+gconv.String(i))
	}

	fmt.Println(tree.Map())
	fmt.Println(tree.Size())

	// Output:
	// map[key0:val0 key1:val1 key2:val2 key3:val3 key4:val4 key5:val5]
	// 6
}

Sets

  • 說明:?Sets?為?tree?批量設(shè)置?key/value?。
  • 格式:
Sets(data map[interface{}]interface{})
  • 示例:
func ExampleBTree_Sets() {
	tree := gtree.NewBTree(3, gutil.ComparatorString)

	tree.Sets(map[interface{}]interface{}{
		"key1": "val1",
		"key2": "val2",
	})

	fmt.Println(tree.Map())
	fmt.Println(tree.Size())

	// Output:
	// map[key1:val1 key2:val2]
	// 2
}

Get

  • 說明:?Get?返回參數(shù)?key?對應(yīng)的值?value?,如?key?不存在,則返回?Nil?。
  • 格式:
Get(key interface{}) (value interface{})
  • 示例:
func ExampleBTree_Get() {
	tree := gtree.NewBTree(3, gutil.ComparatorString)
	for i := 0; i < 6; i++ {
		tree.Set("key"+gconv.String(i), "val"+gconv.String(i))
	}

	fmt.Println(tree.Get("key1"))
	fmt.Println(tree.Get("key10"))

	// Output:
	// val1
	// 
}

GetOrSet

  • 說明:?GetOrSet?如?key?存在,則返回?value?,如?key?不存在,使用?key?和?value?設(shè)置鍵值,然后返回該值。
  • 格式:
GetOrSet(key interface{}, value interface{}) interface{}
  • 示例:
func ExampleBTree_GetOrSet() {
	tree := gtree.NewBTree(3, gutil.ComparatorString)
	for i := 0; i < 6; i++ {
		tree.Set("key"+gconv.String(i), "val"+gconv.String(i))
	}

	fmt.Println(tree.GetOrSet("key1", "newVal1"))
	fmt.Println(tree.GetOrSet("key6", "val6"))

	// Output:
	// val1
	// val6
}

GetOrSetFunc

  • 說明:?GetOrSetFunc?如?key?存在,則返回?value?,如?key?不存在,使用?key?和?func f?的返回值設(shè)置鍵值,然后返回該值。
  • 格式:
GetOrSetFunc(key interface{}, f func() interface{}) interface{}
  • 示例:
func ExampleBTree_GetOrSetFunc() {
	tree := gtree.NewBTree(3, gutil.ComparatorString)
	for i := 0; i < 6; i++ {
		tree.Set("key"+gconv.String(i), "val"+gconv.String(i))
	}

	fmt.Println(tree.GetOrSetFunc("key1", func() interface{} {
		return "newVal1"
	}))
	fmt.Println(tree.GetOrSetFunc("key6", func() interface{} {
		return "val6"
	}))

	// Output:
	// val1
	// val6
}

GetOrSetFuncLock

  • 說明:?GetOrSetFunc?如?key?存在,則返回?value?,如?key?不存在,使用?key?和?func f?的返回值設(shè)置鍵值,然后返回該值。
  • 注意:?GetOrSetFuncLock?與?GetOrSetFunc?函數(shù)的不同之處在于它在寫鎖中執(zhí)行函數(shù)?f?。
  • 格式:
GetOrSetFuncLock(key interface{}, f func() interface{}) interface{}
  • 示例:
func ExampleBTree_GetOrSetFuncLock() {
	tree := gtree.NewBTree(3, gutil.ComparatorString)
	for i := 0; i < 6; i++ {
		tree.Set("key"+gconv.String(i), "val"+gconv.String(i))
	}

	fmt.Println(tree.GetOrSetFuncLock("key1", func() interface{} {
		return "newVal1"
	}))
	fmt.Println(tree.GetOrSetFuncLock("key6", func() interface{} {
		return "val6"
	}))

	// Output:
	// val1
	// val6
}

GetVar

  • 說明:?GetVar?根據(jù)鍵名?key?查詢并返回對應(yīng)的鍵值,類型為?*gvar.Var?。
  • 注意:返回的?gvar.Var?是非并發(fā)安全的。
  • 格式:
GetVar(key interface{}) *gvar.Var
  • 示例:
func ExampleBTree_GetVar() {
	tree := gtree.NewBTree(3, gutil.ComparatorString)
	for i := 0; i < 6; i++ {
		tree.Set("key"+gconv.String(i), "val"+gconv.String(i))
	}

	fmt.Println(tree.GetVar("key1").String())

	// Output:
	// val1
}

GetVarOrSet

  • 說明:?GetVarOrSet?使用?GetOrSet?的結(jié)果返回,類型為?*gvar.Var?。
  • 注意:返回的?gvar.Var?是非并發(fā)安全的。
  • 格式:
GetVarOrSet(key interface{}, value interface{}) *gvar.Var
  • 示例:
func ExampleBTree_GetVarOrSet() {
	tree := gtree.NewBTree(3, gutil.ComparatorString)
	for i := 0; i < 6; i++ {
		tree.Set("key"+gconv.String(i), "val"+gconv.String(i))
	}

	fmt.Println(tree.GetVarOrSet("key1", "newVal1"))
	fmt.Println(tree.GetVarOrSet("key6", "val6"))

	// Output:
	// val1
	// val6
}

GetVarOrSetFunc

  • 說明:?GetVarOrSetFunc?使用?GetOrSetFunc?的結(jié)果返回,類型為?*gvar.Var?。
  • 注意:返回的?gvar.Var?是非并發(fā)安全的。
  • 格式:
GetVarOrSetFunc(key interface{}, f func() interface{}) *gvar.Var
  • 示例:
func ExampleBTree_GetVarOrSetFunc() {
	tree := gtree.NewBTree(3, gutil.ComparatorString)
	for i := 0; i < 6; i++ {
		tree.Set("key"+gconv.String(i), "val"+gconv.String(i))
	}

	fmt.Println(tree.GetVarOrSetFunc("key1", func() interface{} {
		return "newVal1"
	}))
	fmt.Println(tree.GetVarOrSetFunc("key6", func() interface{} {
		return "val6"
	}))

	// Output:
	// val1
	// val6
}

GetVarOrSetFuncLock

  • 說明:?GetVarOrSetFuncLock?使用?GetOrSetFuncLock?的結(jié)果返回,類型為?*gvar.Var?。
  • 注意:返回的?gvar.Var?是非并發(fā)安全的。
  • 格式:
GetVarOrSetFuncLock(key interface{}, f func() interface{}) *gvar.Var
  • 示例:
func ExampleBTree_GetVarOrSetFuncLock() {
	tree := gtree.NewBTree(3, gutil.ComparatorString)
	for i := 0; i < 6; i++ {
		tree.Set("key"+gconv.String(i), "val"+gconv.String(i))
	}

	fmt.Println(tree.GetVarOrSetFuncLock("key1", func() interface{} {
		return "newVal1"
	}))
	fmt.Println(tree.GetVarOrSetFuncLock("key6", func() interface{} {
		return "val6"
	}))

	// Output:
	// val1
	// val6
}

SetIfNotExist

  • 說明:如果?key?不存在,則?SetIfNotExist?為?map?設(shè)置值鍵值對?key/value?,并且返回?true?。如果?key?存在,則返回?false?,而?value?將被忽略。
  • 格式:
SetIfNotExist(key interface{}, value interface{}) bool
  • 示例:
func ExampleBTree_SetIfNotExist() {
	tree := gtree.NewBTree(3, gutil.ComparatorString)
	for i := 0; i < 6; i++ {
		tree.Set("key"+gconv.String(i), "val"+gconv.String(i))
	}

	fmt.Println(tree.SetIfNotExist("key1", "newVal1"))
	fmt.Println(tree.SetIfNotExist("key6", "val6"))

	// Output:
	// false
	// true
}

SetIfNotExistFunc

  • 說明:如果key不存在,則SetIfNotExistFunc設(shè)置值為函數(shù)f的返回值,并且返回true。如果key存在,則返回false,并且value將被忽略。
  • 格式:
SetIfNotExistFunc(key interface{}, f func() interface{}) bool
  • 示例:
func ExampleBTree_SetIfNotExistFunc() {
	tree := gtree.NewBTree(3, gutil.ComparatorString)
	for i := 0; i < 6; i++ {
		tree.Set("key"+gconv.String(i), "val"+gconv.String(i))
	}

	fmt.Println(tree.SetIfNotExistFunc("key1", func() interface{} {
		return "newVal1"
	}))
	fmt.Println(tree.SetIfNotExistFunc("key6", func() interface{} {
		return "val6"
	}))

	// Output:
	// false
	// true
}

SetIfNotExistFuncLock

  • 說明:如果key不存在,則SetIfNotExistFunc設(shè)置值為func c的返回值,然后返回true。如果key存在,則返回false,而value將被忽略。
  • SetIfNotExistFuncLock與SetIfNotExistFunc函數(shù)的不同之處在于它在mutex.Lock中執(zhí)行函數(shù)f。
  • 格式:
SetIfNotExistFuncLock(key interface{}, f func() interface{}) bool

  • 示例:
func ExampleBTree_SetIfNotExistFuncLock() {
	tree := gtree.NewBTree(3, gutil.ComparatorString)
	for i := 0; i < 6; i++ {
		tree.Set("key"+gconv.String(i), "val"+gconv.String(i))
	}

	fmt.Println(tree.SetIfNotExistFuncLock("key1", func() interface{} {
		return "newVal1"
	}))
	fmt.Println(tree.SetIfNotExistFuncLock("key6", func() interface{} {
		return "val6"
	}))

	// Output:
	// false
	// true
}

Contains

  • 說明:?Contains?檢查?key?在?tree?中是否存在。如果?key?存在,則返回?true?,否則返回?false?。
  • 格式:
Contains(key interface{}) bool

  • 示例:
func ExampleBTree_Contains() {
	tree := gtree.NewBTree(3, gutil.ComparatorString)
	for i := 0; i < 6; i++ {
		tree.Set("key"+gconv.String(i), "val"+gconv.String(i))
	}

	fmt.Println(tree.Contains("key1"))
	fmt.Println(tree.Contains("key6"))

	// Output:
	// true
	// false
}

Remove

  • 說明:按給定的?key?從?tree?中刪除?value?,并返回此刪除的?value?。
  • 格式:
Remove(key interface{}) (value interface{})

  • 示例:
func ExampleBTree_Remove() {
	tree := gtree.NewBTree(3, gutil.ComparatorString)
	for i := 0; i < 6; i++ {
		tree.Set("key"+gconv.String(i), "val"+gconv.String(i))
	}

	fmt.Println(tree.Remove("key1"))
	fmt.Println(tree.Remove("key6"))
	fmt.Println(tree.Map())

	// Output:
	// val1
	// 
	// map[key0:val0 key2:val2 key3:val3 key4:val4 key5:val5]
}

Removes

  • 說明:?Removes?按給定的?key?批量刪除?tree?的?value?。
  • 格式:
Removes(keys []interface{})

  • 示例:
func ExampleBTree_Removes() {
	tree := gtree.NewBTree(3, gutil.ComparatorString)
	for i := 0; i < 6; i++ {
		tree.Set("key"+gconv.String(i), "val"+gconv.String(i))
	}

	removeKeys := make([]interface{}, 2)
	removeKeys = append(removeKeys, "key1")
	removeKeys = append(removeKeys, "key6")

	tree.Removes(removeKeys)

	fmt.Println(tree.Map())

	// Output:
	// map[key0:val0 key2:val2 key3:val3 key4:val4 key5:val5]
} 

IsEmpty

  • 說明:?IsEmpty?檢查?tree?是否為空。如果?tree?為空,則返回?true?,否則返回?false?。
  • 格式:
IsEmpty() bool

  • 示例:
func ExampleBTree_IsEmpty() {
	tree := gtree.NewBTree(3, gutil.ComparatorString)

	fmt.Println(tree.IsEmpty())

	for i := 0; i < 6; i++ {
		tree.Set("key"+gconv.String(i), "val"+gconv.String(i))
	}

	fmt.Println(tree.IsEmpty())

	// Output:
	// true
	// false
}

Size

  • 說明:?Size?返回?tree?的大小。
  • 格式:
Size() int

  • 示例:
func ExampleBTree_Size() {
	tree := gtree.NewBTree(3, gutil.ComparatorString)

	fmt.Println(tree.Size())

	for i := 0; i < 6; i++ {
		tree.Set("key"+gconv.String(i), "val"+gconv.String(i))
	}

	fmt.Println(tree.Size())

	// Output:
	// 0
	// 6
}

Keys

  • 說明:?Keys?按升序返回所有的?key?。
  • 格式:
Keys() []interface{}

  • 示例:
func ExampleBTree_Keys() {
	tree := gtree.NewBTree(3, gutil.ComparatorString)
	for i := 6; i > 0; i-- {
		tree.Set("key"+gconv.String(i), "val"+gconv.String(i))
	}

	fmt.Println(tree.Keys())

	// Output:
	// [key1 key2 key3 key4 key5 key6]
}

Values

  • 說明:?Values?按?key?的升序返回所有的?value?。
  • 格式:
Values() []interface{}

  • 示例:
func ExampleBTree_Values() {
	tree := gtree.NewBTree(3, gutil.ComparatorString)
	for i := 6; i > 0; i-- {
		tree.Set("key"+gconv.String(i), "val"+gconv.String(i))
	}

	fmt.Println(tree.Values())

	// Output:
	// [val1 val2 val3 val4 val5 val6]
}

Map

  • 說明:?Map?以?map?的形式返回所有的?key/value?。
  • 格式:
Map() map[interface{}]interface{}

  • 示例:
func ExampleBTree_Map() {
	tree := gtree.NewBTree(3, gutil.ComparatorString)
	for i := 0; i < 6; i++ {
		tree.Set("key"+gconv.String(i), "val"+gconv.String(i))
	}

	fmt.Println(tree.Map())

	// Output:
	// map[key0:val0 key1:val1 key2:val2 key3:val3 key4:val4 key5:val5]
}

MapStrAny

  • 說明:?MapStrAny?以?map[string]interface{}?的形式返回所有的?key/value?。
  • 格式:
MapStrAny() map[string]interface{}

  • 示例:
func ExampleBTree_MapStrAny() {
	tree := gtree.NewBTree(3, gutil.ComparatorString)
	for i := 0; i < 6; i++ {
		tree.Set(1000+i, "val"+gconv.String(i))
	}

	fmt.Println(tree.MapStrAny())

	// Output:
	// map[1000:val0 1001:val1 1002:val2 1003:val3 1004:val4 1005:val5]
}

Clear

  • 說明:?Clear?刪除?tree?的所有數(shù)據(jù)。
  • 格式:
Clear()

  • 示例:
func ExampleBTree_Clear() {
	tree := gtree.NewBTree(3, gutil.ComparatorString)
	for i := 0; i < 6; i++ {
		tree.Set(1000+i, "val"+gconv.String(i))
	}
	fmt.Println(tree.Size())

	tree.Clear()
	fmt.Println(tree.Size())

	// Output:
	// 6
	// 0
}

Replace

  • 說明:?Replace?用類型為?map[interface{}]interface{}?的?data?替換?tree?的?key/value?。
  • 格式:
Replace(data map[interface{}]interface{})

  • 示例:
func ExampleBTree_Replace() {
	tree := gtree.NewBTree(3, gutil.ComparatorString)
	for i := 0; i < 6; i++ {
		tree.Set("key"+gconv.String(i), "val"+gconv.String(i))
	}

	fmt.Println(tree.Map())

	data := map[interface{}]interface{}{
		"newKey0": "newVal0",
		"newKey1": "newVal1",
		"newKey2": "newVal2",
	}

	tree.Replace(data)

	fmt.Println(tree.Map())

	// Output:
	// map[key0:val0 key1:val1 key2:val2 key3:val3 key4:val4 key5:val5]
	// map[newKey0:newVal0 newKey1:newVal1 newKey2:newVal2]
}

Height

  • 說明:?Height?返回?tree?的高度。
  • 格式:
Height() int

  • 示例:
func ExampleBTree_Height() {
	tree := gtree.NewBTree(3, gutil.ComparatorInt)
	for i := 0; i < 100; i++ {
		tree.Set(i, i)
	}
	fmt.Println(tree.Height())

	// Output:
	// 6
}

Left

  • 說明:?Left ?返回最左邊(最?。┑念愋蜑?*BTreeEntry?的?node?,如果?tree?是空的,則返回 ?nil?。
  • 格式:
Left() *BTreeEntry

  • 示例:
func ExampleBTree_Left() {
	tree := gtree.NewBTree(3, gutil.ComparatorInt)
	for i := 1; i < 100; i++ {
		tree.Set(i, i)
	}
	fmt.Println(tree.Left().Key, tree.Left().Value)

	emptyTree := gtree.NewBTree(3, gutil.ComparatorInt)
	fmt.Println(emptyTree.Left())

	// Output:
	// 1 1
	// 
}

Right

  • 說明:?Right ?返回最右邊(最大)的類型為?*BTreeEntry?的?node?,如果?tree?是空的,則返回 ?nil?。
  • 格式:
Right() *BTreeEntry

  • 示例:
func ExampleBTree_Right() {
	tree := gtree.NewBTree(3, gutil.ComparatorInt)
	for i := 1; i < 100; i++ {
		tree.Set(i, i)
	}
	fmt.Println(tree.Right().Key, tree.Right().Value)

	emptyTree := gtree.NewBTree(3, gutil.ComparatorInt)
	fmt.Println(emptyTree.Left())

	// Output:
	// 99 99
	// 
}

String

  • 說明:?String?返回?tree?的?node?顯示(用于調(diào)試)。
  • 格式:
String() string

  • 示例:
func ExampleBTree_String() {
	tree := gtree.NewBTree(3, gutil.ComparatorString)
	for i := 0; i < 6; i++ {
		tree.Set("key"+gconv.String(i), "val"+gconv.String(i))
	}

	fmt.Println(tree.String())

	// Output:
	// key0
	// key1
	//     key2
	// key3
	//     key4
	//     key5
}

Search

  • 說明:?Search?使用參數(shù)?key?搜索?tree?。如果找到?key?,則返回其對應(yīng)的鍵值,并且返回參數(shù)?found?為?true?,否則為?false?。
  • 格式:
Search(key interface{}) (value interface{}, found bool)

  • 示例:
func ExampleBTree_Search() {
	tree := gtree.NewBTree(3, gutil.ComparatorString)
	for i := 0; i < 6; i++ {
		tree.Set("key"+gconv.String(i), "val"+gconv.String(i))
	}

	fmt.Println(tree.Search("key0"))
	fmt.Println(tree.Search("key6"))

	// Output:
	// val0 true
	//  false
}

Print

  • 說明:?Print?將?tree?打印到標準輸出。
  • 格式:
Print()

  • 示例:
func ExampleBTree_Print() {
	tree := gtree.NewBTree(3, gutil.ComparatorString)
	for i := 0; i < 6; i++ {
		tree.Set("key"+gconv.String(i), "val"+gconv.String(i))
	}

	tree.Print()

	// Output:
	// key0
	// key1
	//     key2
	// key3
	//     key4
	//     key5
}

Iterator

  • 說明:?Iterator ?等同于 ?IteratorAsc ?。
  • 格式:
Iterator(f func(key, value interface{}) bool)

  • 示例:
func ExampleBTree_Iterator() {
	tree := gtree.NewBTree(3, gutil.ComparatorString)
	for i := 0; i < 10; i++ {
		tree.Set(i, 10-i)
	}

	var totalKey, totalValue int
	tree.Iterator(func(key, value interface{}) bool {
		totalKey += key.(int)
		totalValue += value.(int)

		return totalValue < 20
	})

	fmt.Println("totalKey:", totalKey)
	fmt.Println("totalValue:", totalValue)

	// Output:
	// totalKey: 3
	// totalValue: 27
}

IteratorFrom

  • 說明:?IteratorFrom ?等同于 ?IteratorAscFrom ?。
  • 格式:
IteratorFrom(key interface{}, match bool, f func(key, value interface{}) bool)

  • 示例:
func ExampleBTree_IteratorFrom() {
	m := make(map[interface{}]interface{})
	for i := 1; i <= 5; i++ {
		m[i] = i * 10
	}
	tree := gtree.NewBTreeFrom(3, gutil.ComparatorInt, m)

	tree.IteratorFrom(1, true, func(key, value interface{}) bool {
		fmt.Println("key:", key, ", value:", value)
		return true
	})

	// Output:
	// key: 1 , value: 10
	// key: 2 , value: 20
	// key: 3 , value: 30
	// key: 4 , value: 40
	// key: 5 , value: 50
}

IteratorAsc

  • 說明:?IteratorAsc?使用自定義回調(diào)函數(shù)?f?以只讀方式按升序迭代?tree?。如果?f?返回?true?,則繼續(xù)迭代,返回?false?則停止。
  • 格式:
IteratorAsc(f func(key, value interface{}) bool)

  • 示例:
func ExampleBTree_IteratorAsc() {
	tree := gtree.NewBTree(3, gutil.ComparatorString)
	for i := 0; i < 10; i++ {
		tree.Set(i, 10-i)
	}

	tree.IteratorAsc(func(key, value interface{}) bool {
		fmt.Println("key:", key, ", value:", value)
		return true
	})

	// Output:
	// key: 0 , value: 10
	// key: 1 , value: 9
	// key: 2 , value: 8
	// key: 3 , value: 7
	// key: 4 , value: 6
	// key: 5 , value: 5
	// key: 6 , value: 4
	// key: 7 , value: 3
	// key: 8 , value: 2
	// key: 9 , value: 1
}

IteratorAscFrom

  • 說明:?IteratorAscFrom?使用自定義回調(diào)函數(shù)f以只讀方式按升序迭代?tree?。參數(shù) ?key ?指定從哪個?key?開始迭代。參數(shù)?match?為?true?時,從?key?完全匹配時開始迭代,否則使用索引搜索迭代。如果?f?返回?true?,則繼續(xù)迭代,返回?false?則停止。
  • 格式:
IteratorAscFrom(key interface{}, match bool, f func(key, value interface{}) bool)

  • 示例:
func ExampleBTree_IteratorAscFrom_Normal() {
	m := make(map[interface{}]interface{})
	for i := 1; i <= 5; i++ {
		m[i] = i * 10
	}
	tree := gtree.NewBTreeFrom(3, gutil.ComparatorInt, m)

	tree.IteratorAscFrom(1, true, func(key, value interface{}) bool {
		fmt.Println("key:", key, ", value:", value)
		return true
	})

	// Output:
	// key: 1 , value: 10
	// key: 2 , value: 20
	// key: 3 , value: 30
	// key: 4 , value: 40
	// key: 5 , value: 50
}
func ExampleBTree_IteratorAscFrom_NoExistKey() {
	m := make(map[interface{}]interface{})
	for i := 1; i <= 5; i++ {
		m[i] = i * 10
	}
	tree := gtree.NewBTreeFrom(3, gutil.ComparatorInt, m)

	tree.IteratorAscFrom(0, true, func(key, value interface{}) bool {
		fmt.Println("key:", key, ", value:", value)
		return true
	})

	// Output:
}
func ExampleBTree_IteratorAscFrom_NoExistKeyAndMatchFalse() {
	m := make(map[interface{}]interface{})
	for i := 1; i <= 5; i++ {
		m[i] = i * 10
	}
	tree := gtree.NewBTreeFrom(3, gutil.ComparatorInt, m)

	tree.IteratorAscFrom(0, false, func(key, value interface{}) bool {
		fmt.Println("key:", key, ", value:", value)
		return true
	})

	// Output:
	// key: 1 , value: 10
	// key: 2 , value: 20
	// key: 3 , value: 30
	// key: 4 , value: 40
	// key: 5 , value: 50
}

IteratorDesc

  • 說明:?IteratorDesc?使用自定義回調(diào)函數(shù)?f?以只讀方式按降序迭代?tree?。如果?f?返回?true?,則繼續(xù)迭代,返回?false?則停止。
  • 格式:
IteratorDesc(f func(key, value interface{}) bool)

  • 示例:
func ExampleBTree_IteratorDesc() {
	tree := gtree.NewBTree(3, gutil.ComparatorString)
	for i := 0; i < 10; i++ {
		tree.Set(i, 10-i)
	}

	tree.IteratorDesc(func(key, value interface{}) bool {
		fmt.Println("key:", key, ", value:", value)
		return true
	})

	// Output:
	// key: 9 , value: 1
	// key: 8 , value: 2
	// key: 7 , value: 3
	// key: 6 , value: 4
	// key: 5 , value: 5
	// key: 4 , value: 6
	// key: 3 , value: 7
	// key: 2 , value: 8
	// key: 1 , value: 9
	// key: 0 , value: 10
}

IteratorDescFrom

  • 說明:?IteratorDescFrom?使用自定義回調(diào)函數(shù)?f?以只讀方式按降序迭代?tree?。參數(shù) ?key指定從哪個?key?開始迭代。參數(shù)?match?為?true?時,從?key?完全匹配時開始迭代,否則使用索引搜索迭代。如果?f?返回?true?,則繼續(xù)迭代,返回?false?則停止。
  • 格式:
IteratorDescFrom(key interface{}, match bool, f func(key, value interface{}) bool)

  • 示例:
func ExampleBTree_IteratorDescFrom() {
	m := make(map[interface{}]interface{})
	for i := 1; i <= 5; i++ {
		m[i] = i * 10
	}
	tree := gtree.NewBTreeFrom(3, gutil.ComparatorInt, m)

	tree.IteratorDescFrom(5, true, func(key, value interface{}) bool {
		fmt.Println("key:", key, ", value:", value)
		return true
	})

	// Output:
	// key: 5 , value: 50
	// key: 4 , value: 40
	// key: 3 , value: 30
	// key: 2 , value: 20
	// key: 1 , value: 10
}

MarshalJson

  • 說明:?MarshalJSON?實現(xiàn)?json.Marshal?的接口。
  • 格式:
MarshalJSON() ([]byte, error)

  • 示例:
func ExampleBTree_MarshalJSON() {
	tree := gtree.NewBTree(3, gutil.ComparatorString)
	for i := 0; i < 6; i++ {
		tree.Set("key"+gconv.String(i), "val"+gconv.String(i))
	}

	bytes, err := json.Marshal(tree)
	if err == nil {
		fmt.Println(gconv.String(bytes))
	}

	// Output:
	// {"key0":"val0","key1":"val1","key2":"val2","key3":"val3","key4":"val4","key5":"val5"}
}

網(wǎng)站欄目:創(chuàng)新互聯(lián)GoFrame教程:GoFramegtree-方法介紹
文章分享:http://www.dlmjj.cn/article/dpcpsji.html