From 8a22b129ddd92636f5f8fc3b4fb7d529a5e393c0 Mon Sep 17 00:00:00 2001 From: huangqian Date: Tue, 23 Nov 2021 20:52:57 +0800 Subject: [PATCH 1/8] add gtree example new file --- container/gtree/gtree_z_example_avltree_test.go | 1 + container/gtree/gtree_z_example_btree_test.go | 7 +++++++ container/gtree/gtree_z_example_redblacktree_test.go | 1 + 3 files changed, 9 insertions(+) create mode 100644 container/gtree/gtree_z_example_avltree_test.go create mode 100644 container/gtree/gtree_z_example_btree_test.go create mode 100644 container/gtree/gtree_z_example_redblacktree_test.go diff --git a/container/gtree/gtree_z_example_avltree_test.go b/container/gtree/gtree_z_example_avltree_test.go new file mode 100644 index 000000000..7f1a414ff --- /dev/null +++ b/container/gtree/gtree_z_example_avltree_test.go @@ -0,0 +1 @@ +package gtree diff --git a/container/gtree/gtree_z_example_btree_test.go b/container/gtree/gtree_z_example_btree_test.go new file mode 100644 index 000000000..f96f52a07 --- /dev/null +++ b/container/gtree/gtree_z_example_btree_test.go @@ -0,0 +1,7 @@ +// Copyright GoFrame Author(https://goframe.org). All Rights Reserved. +// +// This Source Code Form is subject to the terms of the MIT License. +// If a copy of the MIT was not distributed with gm file, +// You can obtain one at https://github.com/gogf/gf. + +package gtree_test diff --git a/container/gtree/gtree_z_example_redblacktree_test.go b/container/gtree/gtree_z_example_redblacktree_test.go new file mode 100644 index 000000000..7f1a414ff --- /dev/null +++ b/container/gtree/gtree_z_example_redblacktree_test.go @@ -0,0 +1 @@ +package gtree From c12404b378fc6aea56dc67fef3db95ded142443b Mon Sep 17 00:00:00 2001 From: huangqian Date: Tue, 23 Nov 2021 20:53:17 +0800 Subject: [PATCH 2/8] add gtree example new file --- container/gtree/gtree_z_example_avltree_test.go | 8 +++++++- container/gtree/gtree_z_example_redblacktree_test.go | 8 +++++++- 2 files changed, 14 insertions(+), 2 deletions(-) diff --git a/container/gtree/gtree_z_example_avltree_test.go b/container/gtree/gtree_z_example_avltree_test.go index 7f1a414ff..f96f52a07 100644 --- a/container/gtree/gtree_z_example_avltree_test.go +++ b/container/gtree/gtree_z_example_avltree_test.go @@ -1 +1,7 @@ -package gtree +// Copyright GoFrame Author(https://goframe.org). All Rights Reserved. +// +// This Source Code Form is subject to the terms of the MIT License. +// If a copy of the MIT was not distributed with gm file, +// You can obtain one at https://github.com/gogf/gf. + +package gtree_test diff --git a/container/gtree/gtree_z_example_redblacktree_test.go b/container/gtree/gtree_z_example_redblacktree_test.go index 7f1a414ff..f96f52a07 100644 --- a/container/gtree/gtree_z_example_redblacktree_test.go +++ b/container/gtree/gtree_z_example_redblacktree_test.go @@ -1 +1,7 @@ -package gtree +// Copyright GoFrame Author(https://goframe.org). All Rights Reserved. +// +// This Source Code Form is subject to the terms of the MIT License. +// If a copy of the MIT was not distributed with gm file, +// You can obtain one at https://github.com/gogf/gf. + +package gtree_test From 09be476fd90284c1b5f4156fee2cc18a3a4dba6a Mon Sep 17 00:00:00 2001 From: huangqian Date: Tue, 23 Nov 2021 23:21:29 +0800 Subject: [PATCH 3/8] Implemented BTree Example 1.NewBTree 2.NewBTreeFrom --- container/gtree/gtree_z_example_btree_test.go | 152 +++++++++++++++++- container/gtree/gtree_z_example_test.go | 64 ++++++++ 2 files changed, 215 insertions(+), 1 deletion(-) create mode 100644 container/gtree/gtree_z_example_test.go diff --git a/container/gtree/gtree_z_example_btree_test.go b/container/gtree/gtree_z_example_btree_test.go index f96f52a07..315a99959 100644 --- a/container/gtree/gtree_z_example_btree_test.go +++ b/container/gtree/gtree_z_example_btree_test.go @@ -2,6 +2,156 @@ // // This Source Code Form is subject to the terms of the MIT License. // If a copy of the MIT was not distributed with gm file, -// You can obtain one at https://github.com/gogf/gf. +// You can obtain one at https://github.com/Agogf/gf. package gtree_test + +func ExampleBTree_Clone() { + +} + +func ExampleBTree_Set() { + +} + +func ExampleBTree_Sets() { + +} + +func ExampleBTree_Get() { + +} + +func ExampleBTree_GetOrSet() { + +} + +func ExampleBTree_GetOrSetFunc() { + +} + +func ExampleBTree_GetOrSetFuncLock() { + +} + +func ExampleBTree_GetVar() { + +} + +func ExampleBTree_GetVarOrSet() { + +} + +func ExampleBTree_GetVarOrSetFunc() { + +} + +func ExampleBTree_GetVarOrSetFuncLock() { + +} + +func ExampleBTree_SetIfNotExist() { + +} + +func ExampleBTree_SetIfNotExistFunc() { + +} + +func ExampleBTree_SetIfNotExistFuncLock() { + +} + +func ExampleBTree_Contains() { + +} +func ExampleBTree_Remove() { + +} + +func ExampleBTree_Removes() { + +} + +func ExampleBTree_IsEmpty() { + +} + +func ExampleBTree_Size() { + +} + +func ExampleBTree_Keys() { + +} + +func ExampleBTree_Values() { + +} + +func ExampleBTree_Map() { + +} +func ExampleBTree_MapStrAny() { + +} + +func ExampleBTree_Clear() { + +} + +func ExampleBTree_Replace() { + +} + +func ExampleBTree_Height() { + +} + +func ExampleBTree_Left() { + +} + +func ExampleBTree_Right() { + +} + +func ExampleBTree_String() { + +} + +func ExampleBTree_Search() { + +} + +func ExampleBTree_Print() { + +} + +func ExampleBTree_Iterator() { + +} + +func ExampleBTree_IteratorFrom() { + +} + +func ExampleBTree_IteratorAsc() { + +} + +func ExampleBTree_IteratorAscFrom() { + +} + +func ExampleBTree_IteratorDesc() { + +} + +func ExampleBTree_IteratorDescFrom() { + +} + +func ExampleBTree_MarshalJSON() { + +} diff --git a/container/gtree/gtree_z_example_test.go b/container/gtree/gtree_z_example_test.go new file mode 100644 index 000000000..4ea8a7ae5 --- /dev/null +++ b/container/gtree/gtree_z_example_test.go @@ -0,0 +1,64 @@ +// Copyright GoFrame Author(https://goframe.org). All Rights Reserved. +// +// This Source Code Form is subject to the terms of the MIT License. +// If a copy of the MIT was not distributed with gm file, +// You can obtain one at https://github.com/Agogf/gf. + +package gtree_test + +import ( + "fmt" + "github.com/gogf/gf/v2/container/gtree" + "github.com/gogf/gf/v2/util/gconv" + "github.com/gogf/gf/v2/util/gutil" +) + +func ExampleNewAVLTree() { + +} + +func ExampleNewAVLTreeFrom() { + +} + +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) + + // output: + // key0 + // key1 + // key2 + // key3 + // key4 + // key5 +} + +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) + + // output: + // key0 + // key1 + // key2 + // key3 + // key4 + // key5 +} + +func ExampleNewRedBlackTree() { + +} + +func ExampleNewRedBlackTreeFrom() { + +} From 2866ee75a1eed4fa24667dd1cc0ec9e7ef6e4947 Mon Sep 17 00:00:00 2001 From: huangqian Date: Wed, 24 Nov 2021 23:23:14 +0800 Subject: [PATCH 4/8] Implemented BTree Example 1.Clone 2.Set 3.Sets 4.Get 5.GetOrSet 6.GetOrSetFunc 7.GetOrSetFuncLock --- container/gtree/gtree_z_example_btree_test.go | 91 ++++++++++++++++++- 1 file changed, 90 insertions(+), 1 deletion(-) diff --git a/container/gtree/gtree_z_example_btree_test.go b/container/gtree/gtree_z_example_btree_test.go index 315a99959..78cbd2397 100644 --- a/container/gtree/gtree_z_example_btree_test.go +++ b/container/gtree/gtree_z_example_btree_test.go @@ -6,32 +6,121 @@ package gtree_test -func ExampleBTree_Clone() { +import ( + "fmt" + "github.com/gogf/gf/v2/container/gtree" + "github.com/gogf/gf/v2/util/gconv" + "github.com/gogf/gf/v2/util/gutil" +) +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)) + } + + newTree := b.Clone() + + fmt.Println(newTree.Map()) + fmt.Println(newTree.Size()) + + // output: + // map[key0:val0 key1:val1 key2:val2 key3:val3 key4:val4 key5:val5] + // 6 } func ExampleBTree_Set() { + newTree := gtree.NewBTree(3, gutil.ComparatorString) + for i := 0; i < 6; i++ { + newTree.Set("key"+gconv.String(i), "val"+gconv.String(i)) + } + fmt.Println(newTree.Map()) + fmt.Println(newTree.Size()) + + // output: + // map[key0:val0 key1:val1 key2:val2 key3:val3 key4:val4 key5:val5] + // 6 } func ExampleBTree_Sets() { + newTree := gtree.NewBTree(3, gutil.ComparatorString) + newTree.Sets(map[interface{}]interface{}{ + "key1": "val1", + "key2": "val2", + }) + + fmt.Println(newTree.Map()) + fmt.Println(newTree.Size()) + + // output: + // map[key1:val1 key2:val2] + // 2 } func ExampleBTree_Get() { + newTree := gtree.NewBTree(3, gutil.ComparatorString) + for i := 0; i < 6; i++ { + newTree.Set("key"+gconv.String(i), "val"+gconv.String(i)) + } + fmt.Println(newTree.Get("key1")) + fmt.Println(newTree.Get("key10")) + + // output: + // val1 + // } func ExampleBTree_GetOrSet() { + newTree := gtree.NewBTree(3, gutil.ComparatorString) + for i := 0; i < 6; i++ { + newTree.Set("key"+gconv.String(i), "val"+gconv.String(i)) + } + fmt.Println(newTree.GetOrSet("key1", "newVal1")) + fmt.Println(newTree.GetOrSet("key6", "val6")) + + // output: + // val1 + // val6 } func ExampleBTree_GetOrSetFunc() { + newTree := gtree.NewBTree(3, gutil.ComparatorString) + for i := 0; i < 6; i++ { + newTree.Set("key"+gconv.String(i), "val"+gconv.String(i)) + } + fmt.Println(newTree.GetOrSetFunc("key1", func() interface{} { + return "newVal1" + })) + fmt.Println(newTree.GetOrSetFunc("key6", func() interface{} { + return "val6" + })) + + // output: + // val1 + // val6 } func ExampleBTree_GetOrSetFuncLock() { + newTree := gtree.NewBTree(3, gutil.ComparatorString) + for i := 0; i < 6; i++ { + newTree.Set("key"+gconv.String(i), "val"+gconv.String(i)) + } + fmt.Println(newTree.GetOrSetFuncLock("key1", func() interface{} { + return "newVal1" + })) + fmt.Println(newTree.GetOrSetFuncLock("key6", func() interface{} { + return "val6" + })) + + // output: + // val1 + // val6 } func ExampleBTree_GetVar() { From 65b6fbba8419c8b7bf251e41b6fa57e3dedbd997 Mon Sep 17 00:00:00 2001 From: huangqian Date: Thu, 25 Nov 2021 07:25:29 +0800 Subject: [PATCH 5/8] Implemented BTree Example 1.GetVar 2.GetVarOrSet 3.GetVarOrSetFunc 4.GetVarOrSetFuncLock 5.SetIfNotExist 6.SetIfNotExistFunc 7.SetIfNotExistFuncLock 8.Contains 9.Remove 10.Removes 11.IsEmpty 12.Size --- container/gtree/gtree_z_example_btree_test.go | 148 +++++++++++++++++- 1 file changed, 147 insertions(+), 1 deletion(-) diff --git a/container/gtree/gtree_z_example_btree_test.go b/container/gtree/gtree_z_example_btree_test.go index 78cbd2397..e4cbcd320 100644 --- a/container/gtree/gtree_z_example_btree_test.go +++ b/container/gtree/gtree_z_example_btree_test.go @@ -124,50 +124,195 @@ func ExampleBTree_GetOrSetFuncLock() { } func ExampleBTree_GetVar() { + newTree := gtree.NewBTree(3, gutil.ComparatorString) + for i := 0; i < 6; i++ { + newTree.Set("key"+gconv.String(i), "val"+gconv.String(i)) + } + fmt.Println(newTree.GetVar("key1")) + + // output: + // val1 } func ExampleBTree_GetVarOrSet() { + newTree := gtree.NewBTree(3, gutil.ComparatorString) + for i := 0; i < 6; i++ { + newTree.Set("key"+gconv.String(i), "val"+gconv.String(i)) + } + fmt.Println(newTree.GetVarOrSet("key1", "newVal1")) + fmt.Println(newTree.GetVarOrSet("key6", "val6")) + + // output: + // val1 + // val6 } func ExampleBTree_GetVarOrSetFunc() { + newTree := gtree.NewBTree(3, gutil.ComparatorString) + for i := 0; i < 6; i++ { + newTree.Set("key"+gconv.String(i), "val"+gconv.String(i)) + } + fmt.Println(newTree.GetVarOrSetFunc("key1", func() interface{} { + return "newVal1" + })) + fmt.Println(newTree.GetVarOrSetFunc("key6", func() interface{} { + return "val6" + })) + + // output: + // val1 + // val6 } func ExampleBTree_GetVarOrSetFuncLock() { + newTree := gtree.NewBTree(3, gutil.ComparatorString) + for i := 0; i < 6; i++ { + newTree.Set("key"+gconv.String(i), "val"+gconv.String(i)) + } + fmt.Println(newTree.GetVarOrSetFuncLock("key1", func() interface{} { + return "newVal1" + })) + fmt.Println(newTree.GetVarOrSetFuncLock("key6", func() interface{} { + return "val6" + })) + + // output: + // val1 + // val6 } func ExampleBTree_SetIfNotExist() { + newTree := gtree.NewBTree(3, gutil.ComparatorString) + for i := 0; i < 6; i++ { + newTree.Set("key"+gconv.String(i), "val"+gconv.String(i)) + } + fmt.Println(newTree.SetIfNotExist("key1", "newVal1")) + fmt.Println(newTree.SetIfNotExist("key6", "val6")) + + // output: + // false + // true } func ExampleBTree_SetIfNotExistFunc() { + newTree := gtree.NewBTree(3, gutil.ComparatorString) + for i := 0; i < 6; i++ { + newTree.Set("key"+gconv.String(i), "val"+gconv.String(i)) + } + fmt.Println(newTree.SetIfNotExistFunc("key1", func() interface{} { + return "newVal1" + })) + fmt.Println(newTree.SetIfNotExistFunc("key6", func() interface{} { + return "val6" + })) + + // output: + // false + // true } func ExampleBTree_SetIfNotExistFuncLock() { + newTree := gtree.NewBTree(3, gutil.ComparatorString) + for i := 0; i < 6; i++ { + newTree.Set("key"+gconv.String(i), "val"+gconv.String(i)) + } + fmt.Println(newTree.SetIfNotExistFuncLock("key1", func() interface{} { + return "newVal1" + })) + fmt.Println(newTree.SetIfNotExistFuncLock("key6", func() interface{} { + return "val6" + })) + + // output: + // false + // true } func ExampleBTree_Contains() { + newTree := gtree.NewBTree(3, gutil.ComparatorString) + for i := 0; i < 6; i++ { + newTree.Set("key"+gconv.String(i), "val"+gconv.String(i)) + } + fmt.Println(newTree.Contains("key1")) + fmt.Println(newTree.Contains("key6")) + + // output: + // true + // false } -func ExampleBTree_Remove() { +func ExampleBTree_Remove() { + newTree := gtree.NewBTree(3, gutil.ComparatorString) + for i := 0; i < 6; i++ { + newTree.Set("key"+gconv.String(i), "val"+gconv.String(i)) + } + + fmt.Println(newTree.Remove("key1")) + fmt.Println(newTree.Remove("key6")) + fmt.Println(newTree.Map()) + + // output: + // val1 + // + // map[key0:val0 key2:val2 key3:val3 key4:val4 key5:val5] } func ExampleBTree_Removes() { + newTree := gtree.NewBTree(3, gutil.ComparatorString) + for i := 0; i < 6; i++ { + newTree.Set("key"+gconv.String(i), "val"+gconv.String(i)) + } + removeKeys := make([]interface{}, 2) + removeKeys = append(removeKeys, "key1") + removeKeys = append(removeKeys, "key6") + + newTree.Removes(removeKeys) + + fmt.Println(newTree.Map()) + + // output: + // map[key0:val0 key2:val2 key3:val3 key4:val4 key5:val5] } func ExampleBTree_IsEmpty() { + newTree := gtree.NewBTree(3, gutil.ComparatorString) + fmt.Println(newTree.IsEmpty()) + + for i := 0; i < 6; i++ { + newTree.Set("key"+gconv.String(i), "val"+gconv.String(i)) + } + + fmt.Println(newTree.IsEmpty()) + + // output: + // true + // false } func ExampleBTree_Size() { + newTree := gtree.NewBTree(3, gutil.ComparatorString) + fmt.Println(newTree.Size()) + + for i := 0; i < 6; i++ { + newTree.Set("key"+gconv.String(i), "val"+gconv.String(i)) + } + + fmt.Println(newTree.Size()) + + // output: + // 0 + // 6 } func ExampleBTree_Keys() { @@ -181,6 +326,7 @@ func ExampleBTree_Values() { func ExampleBTree_Map() { } + func ExampleBTree_MapStrAny() { } From 2c542cfd460ce984fb9d4f1137ad5fb07bdaa910 Mon Sep 17 00:00:00 2001 From: huangqian Date: Thu, 25 Nov 2021 23:55:36 +0800 Subject: [PATCH 6/8] Implemented BTree Example 1.Keys 2.Values 3.Map 4.MapStrAny 5.Clear 6.Replace 7.Height 8.Left 9.Right 10.String 11.Search 12.Print 13.Iterator 14.IteratorFrom 15.IteratorAsc 16.IteratorAscFrom 17.IteratorDesc 18.IteratorDescFrom 19.MarshalJson --- container/gtree/gtree_z_example_btree_test.go | 288 +++++++++++++++++- container/gtree/gtree_z_example_test.go | 18 +- 2 files changed, 291 insertions(+), 15 deletions(-) diff --git a/container/gtree/gtree_z_example_btree_test.go b/container/gtree/gtree_z_example_btree_test.go index e4cbcd320..4d47ed114 100644 --- a/container/gtree/gtree_z_example_btree_test.go +++ b/container/gtree/gtree_z_example_btree_test.go @@ -9,6 +9,7 @@ package gtree_test import ( "fmt" "github.com/gogf/gf/v2/container/gtree" + "github.com/gogf/gf/v2/internal/json" "github.com/gogf/gf/v2/util/gconv" "github.com/gogf/gf/v2/util/gutil" ) @@ -316,77 +317,362 @@ func ExampleBTree_Size() { } func ExampleBTree_Keys() { + newTree := gtree.NewBTree(3, gutil.ComparatorString) + for i := 6; i > 0; i-- { + newTree.Set("key"+gconv.String(i), "val"+gconv.String(i)) + } + fmt.Println(newTree.Keys()) + + // output: + // [key1 key2 key3 key4 key5 key6] } func ExampleBTree_Values() { + newTree := gtree.NewBTree(3, gutil.ComparatorString) + for i := 6; i > 0; i-- { + newTree.Set("key"+gconv.String(i), "val"+gconv.String(i)) + } + fmt.Println(newTree.Values()) + + // output: + // [val1 val2 val3 val4 val5 val6] } func ExampleBTree_Map() { + newTree := gtree.NewBTree(3, gutil.ComparatorString) + for i := 0; i < 6; i++ { + newTree.Set("key"+gconv.String(i), "val"+gconv.String(i)) + } + fmt.Println(newTree.Map()) + + // output: + // map[key0:val0 key1:val1 key2:val2 key3:val3 key4:val4 key5:val5] } func ExampleBTree_MapStrAny() { + newTree := gtree.NewBTree(3, gutil.ComparatorString) + for i := 0; i < 6; i++ { + newTree.Set(1000+i, "val"+gconv.String(i)) + } + fmt.Println(newTree.MapStrAny()) + + // output: + // map[1000:val0 1001:val1 1002:val2 1003:val3 1004:val4 1005:val5] } func ExampleBTree_Clear() { + newTree := gtree.NewBTree(3, gutil.ComparatorString) + for i := 0; i < 6; i++ { + newTree.Set(1000+i, "val"+gconv.String(i)) + } + fmt.Println(newTree.Size()) + newTree.Clear() + fmt.Println(newTree.Size()) + + // output: + // 6 + // 0 } func ExampleBTree_Replace() { + newTree := gtree.NewBTree(3, gutil.ComparatorString) + for i := 0; i < 6; i++ { + newTree.Set("key"+gconv.String(i), "val"+gconv.String(i)) + } + fmt.Println(newTree.Map()) + + data := map[interface{}]interface{}{ + "newKey0": "newVal0", + "newKey1": "newVal1", + "newKey2": "newVal2", + } + + newTree.Replace(data) + + fmt.Println(newTree.Map()) + + // output: + // map[key0:val0 key1:val1 key2:val2 key3:val3 key4:val4 key5:val5] + // map[newKey0:newVal0 newKey1:newVal1 newKey2:newVal2] } func ExampleBTree_Height() { + newTree := gtree.NewBTree(3, gutil.ComparatorInt) + for i := 0; i < 100; i++ { + newTree.Set(i, i) + } + fmt.Println(newTree.Height()) + // output: + // 6 } func ExampleBTree_Left() { + newTree := gtree.NewBTree(3, gutil.ComparatorInt) + for i := 1; i < 100; i++ { + newTree.Set(i, i) + } + fmt.Println(newTree.Left().Key, newTree.Left().Value) + emptyTree := gtree.NewBTree(3, gutil.ComparatorInt) + fmt.Println(emptyTree.Left()) + + // output: + // 1 1 + // } func ExampleBTree_Right() { + newTree := gtree.NewBTree(3, gutil.ComparatorInt) + for i := 1; i < 100; i++ { + newTree.Set(i, i) + } + fmt.Println(newTree.Right().Key, newTree.Right().Value) + emptyTree := gtree.NewBTree(3, gutil.ComparatorInt) + fmt.Println(emptyTree.Left()) + + // output: + // 99 99 + // } func ExampleBTree_String() { + newTree := gtree.NewBTree(3, gutil.ComparatorString) + for i := 0; i < 6; i++ { + newTree.Set("key"+gconv.String(i), "val"+gconv.String(i)) + } + fmt.Println(newTree.String()) + + // output: + // key0 + // key1 + // key2 + // key3 + // key4 + // key5 } func ExampleBTree_Search() { + newTree := gtree.NewBTree(3, gutil.ComparatorString) + for i := 0; i < 6; i++ { + newTree.Set("key"+gconv.String(i), "val"+gconv.String(i)) + } + fmt.Println(newTree.Search("key0")) + fmt.Println(newTree.Search("key6")) + + // output: + // val0 true + // false } func ExampleBTree_Print() { + newTree := gtree.NewBTree(3, gutil.ComparatorString) + for i := 0; i < 6; i++ { + newTree.Set("key"+gconv.String(i), "val"+gconv.String(i)) + } + newTree.Print() + + // output: + // key0 + // key1 + // key2 + // key3 + // key4 + // key5 } func ExampleBTree_Iterator() { + newTree := gtree.NewBTree(3, gutil.ComparatorString) + for i := 0; i < 10; i++ { + newTree.Set(i, 10-i) + } + var totalKey, totalValue int + newTree.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 } 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) + fmt.Println("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_IteratorAsc() { + newTree := gtree.NewBTree(3, gutil.ComparatorString) + for i := 0; i < 10; i++ { + newTree.Set(i, 10-i) + } + newTree.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 } -func ExampleBTree_IteratorAscFrom() { +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 } func ExampleBTree_IteratorDesc() { + newTree := gtree.NewBTree(3, gutil.ComparatorString) + for i := 0; i < 10; i++ { + newTree.Set(i, 10-i) + } + newTree.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 } 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 } func ExampleBTree_MarshalJSON() { + newTree := gtree.NewBTree(3, gutil.ComparatorString) + for i := 0; i < 6; i++ { + newTree.Set("key"+gconv.String(i), "val"+gconv.String(i)) + } + bytes, err := json.Marshal(newTree) + if err == nil { + fmt.Println(gconv.String(bytes)) + } + + // output: + // {"key0":"val0","key1":"val1","key2":"val2","key3":"val3","key4":"val4","key5":"val5"} } diff --git a/container/gtree/gtree_z_example_test.go b/container/gtree/gtree_z_example_test.go index 4ea8a7ae5..412ed74c1 100644 --- a/container/gtree/gtree_z_example_test.go +++ b/container/gtree/gtree_z_example_test.go @@ -26,15 +26,10 @@ func ExampleNewBTree() { for i := 0; i < 6; i++ { bTree.Set("key"+gconv.String(i), "val"+gconv.String(i)) } - fmt.Println(bTree) + fmt.Println(bTree.Map()) // output: - // key0 - // key1 - // key2 - // key3 - // key4 - // key5 + // map[key0:val0 key1:val1 key2:val2 key3:val3 key4:val4 key5:val5] } func ExampleNewBTreeFrom() { @@ -44,15 +39,10 @@ func ExampleNewBTreeFrom() { } otherBTree := gtree.NewBTreeFrom(3, gutil.ComparatorString, bTree.Map()) - fmt.Println(otherBTree) + fmt.Println(otherBTree.Map()) // output: - // key0 - // key1 - // key2 - // key3 - // key4 - // key5 + // map[key0:val0 key1:val1 key2:val2 key3:val3 key4:val4 key5:val5] } func ExampleNewRedBlackTree() { From f78d65833bcb9ab1692f4ba70904458751f4c087 Mon Sep 17 00:00:00 2001 From: huangqian Date: Thu, 25 Nov 2021 23:56:51 +0800 Subject: [PATCH 7/8] Fix Left() And Right() Panic Bug --- container/gtree/gtree_btree.go | 12 +++++++++--- 1 file changed, 9 insertions(+), 3 deletions(-) diff --git a/container/gtree/gtree_btree.go b/container/gtree/gtree_btree.go index ec8362639..3b5478c6b 100644 --- a/container/gtree/gtree_btree.go +++ b/container/gtree/gtree_btree.go @@ -346,7 +346,10 @@ func (tree *BTree) Left() *BTreeEntry { tree.mu.RLock() defer tree.mu.RUnlock() node := tree.left(tree.root) - return node.Entries[0] + if node != nil { + return node.Entries[0] + } + return nil } // Right returns the right-most (max) entry or nil if tree is empty. @@ -354,7 +357,10 @@ func (tree *BTree) Right() *BTreeEntry { tree.mu.RLock() defer tree.mu.RUnlock() node := tree.right(tree.root) - return node.Entries[len(node.Entries)-1] + if node != nil { + return node.Entries[len(node.Entries)-1] + } + return nil } // String returns a string representation of container (for debugging purposes) @@ -931,7 +937,7 @@ func (tree *BTree) deleteChild(node *BTreeNode, index int) { // MarshalJSON implements the interface MarshalJSON for json.Marshal. func (tree *BTree) MarshalJSON() ([]byte, error) { - return json.Marshal(tree.Map()) + return json.Marshal(tree.MapStrAny()) } // getComparator returns the comparator if it's previously set, From a0c139f6a720c1a2c81e28051ea635ee78d4f88f Mon Sep 17 00:00:00 2001 From: huangqian Date: Fri, 26 Nov 2021 21:05:01 +0800 Subject: [PATCH 8/8] rename words and format output --- container/gtree/gtree_z_example_btree_test.go | 338 +++++++++--------- container/gtree/gtree_z_example_test.go | 4 +- 2 files changed, 168 insertions(+), 174 deletions(-) diff --git a/container/gtree/gtree_z_example_btree_test.go b/container/gtree/gtree_z_example_btree_test.go index 4d47ed114..9bd3df40a 100644 --- a/container/gtree/gtree_z_example_btree_test.go +++ b/container/gtree/gtree_z_example_btree_test.go @@ -20,372 +20,372 @@ func ExampleBTree_Clone() { b.Set("key"+gconv.String(i), "val"+gconv.String(i)) } - newTree := b.Clone() + tree := b.Clone() - fmt.Println(newTree.Map()) - fmt.Println(newTree.Size()) + fmt.Println(tree.Map()) + fmt.Println(tree.Size()) - // output: + // Output: // map[key0:val0 key1:val1 key2:val2 key3:val3 key4:val4 key5:val5] // 6 } func ExampleBTree_Set() { - newTree := gtree.NewBTree(3, gutil.ComparatorString) + tree := gtree.NewBTree(3, gutil.ComparatorString) for i := 0; i < 6; i++ { - newTree.Set("key"+gconv.String(i), "val"+gconv.String(i)) + tree.Set("key"+gconv.String(i), "val"+gconv.String(i)) } - fmt.Println(newTree.Map()) - fmt.Println(newTree.Size()) + fmt.Println(tree.Map()) + fmt.Println(tree.Size()) - // output: + // Output: // map[key0:val0 key1:val1 key2:val2 key3:val3 key4:val4 key5:val5] // 6 } func ExampleBTree_Sets() { - newTree := gtree.NewBTree(3, gutil.ComparatorString) + tree := gtree.NewBTree(3, gutil.ComparatorString) - newTree.Sets(map[interface{}]interface{}{ + tree.Sets(map[interface{}]interface{}{ "key1": "val1", "key2": "val2", }) - fmt.Println(newTree.Map()) - fmt.Println(newTree.Size()) + fmt.Println(tree.Map()) + fmt.Println(tree.Size()) - // output: + // Output: // map[key1:val1 key2:val2] // 2 } func ExampleBTree_Get() { - newTree := gtree.NewBTree(3, gutil.ComparatorString) + tree := gtree.NewBTree(3, gutil.ComparatorString) for i := 0; i < 6; i++ { - newTree.Set("key"+gconv.String(i), "val"+gconv.String(i)) + tree.Set("key"+gconv.String(i), "val"+gconv.String(i)) } - fmt.Println(newTree.Get("key1")) - fmt.Println(newTree.Get("key10")) + fmt.Println(tree.Get("key1")) + fmt.Println(tree.Get("key10")) - // output: + // Output: // val1 // } func ExampleBTree_GetOrSet() { - newTree := gtree.NewBTree(3, gutil.ComparatorString) + tree := gtree.NewBTree(3, gutil.ComparatorString) for i := 0; i < 6; i++ { - newTree.Set("key"+gconv.String(i), "val"+gconv.String(i)) + tree.Set("key"+gconv.String(i), "val"+gconv.String(i)) } - fmt.Println(newTree.GetOrSet("key1", "newVal1")) - fmt.Println(newTree.GetOrSet("key6", "val6")) + fmt.Println(tree.GetOrSet("key1", "newVal1")) + fmt.Println(tree.GetOrSet("key6", "val6")) - // output: + // Output: // val1 // val6 } func ExampleBTree_GetOrSetFunc() { - newTree := gtree.NewBTree(3, gutil.ComparatorString) + tree := gtree.NewBTree(3, gutil.ComparatorString) for i := 0; i < 6; i++ { - newTree.Set("key"+gconv.String(i), "val"+gconv.String(i)) + tree.Set("key"+gconv.String(i), "val"+gconv.String(i)) } - fmt.Println(newTree.GetOrSetFunc("key1", func() interface{} { + fmt.Println(tree.GetOrSetFunc("key1", func() interface{} { return "newVal1" })) - fmt.Println(newTree.GetOrSetFunc("key6", func() interface{} { + fmt.Println(tree.GetOrSetFunc("key6", func() interface{} { return "val6" })) - // output: + // Output: // val1 // val6 } func ExampleBTree_GetOrSetFuncLock() { - newTree := gtree.NewBTree(3, gutil.ComparatorString) + tree := gtree.NewBTree(3, gutil.ComparatorString) for i := 0; i < 6; i++ { - newTree.Set("key"+gconv.String(i), "val"+gconv.String(i)) + tree.Set("key"+gconv.String(i), "val"+gconv.String(i)) } - fmt.Println(newTree.GetOrSetFuncLock("key1", func() interface{} { + fmt.Println(tree.GetOrSetFuncLock("key1", func() interface{} { return "newVal1" })) - fmt.Println(newTree.GetOrSetFuncLock("key6", func() interface{} { + fmt.Println(tree.GetOrSetFuncLock("key6", func() interface{} { return "val6" })) - // output: + // Output: // val1 // val6 } func ExampleBTree_GetVar() { - newTree := gtree.NewBTree(3, gutil.ComparatorString) + tree := gtree.NewBTree(3, gutil.ComparatorString) for i := 0; i < 6; i++ { - newTree.Set("key"+gconv.String(i), "val"+gconv.String(i)) + tree.Set("key"+gconv.String(i), "val"+gconv.String(i)) } - fmt.Println(newTree.GetVar("key1")) + fmt.Println(tree.GetVar("key1").String()) - // output: + // Output: // val1 } func ExampleBTree_GetVarOrSet() { - newTree := gtree.NewBTree(3, gutil.ComparatorString) + tree := gtree.NewBTree(3, gutil.ComparatorString) for i := 0; i < 6; i++ { - newTree.Set("key"+gconv.String(i), "val"+gconv.String(i)) + tree.Set("key"+gconv.String(i), "val"+gconv.String(i)) } - fmt.Println(newTree.GetVarOrSet("key1", "newVal1")) - fmt.Println(newTree.GetVarOrSet("key6", "val6")) + fmt.Println(tree.GetVarOrSet("key1", "newVal1")) + fmt.Println(tree.GetVarOrSet("key6", "val6")) - // output: + // Output: // val1 // val6 } func ExampleBTree_GetVarOrSetFunc() { - newTree := gtree.NewBTree(3, gutil.ComparatorString) + tree := gtree.NewBTree(3, gutil.ComparatorString) for i := 0; i < 6; i++ { - newTree.Set("key"+gconv.String(i), "val"+gconv.String(i)) + tree.Set("key"+gconv.String(i), "val"+gconv.String(i)) } - fmt.Println(newTree.GetVarOrSetFunc("key1", func() interface{} { + fmt.Println(tree.GetVarOrSetFunc("key1", func() interface{} { return "newVal1" })) - fmt.Println(newTree.GetVarOrSetFunc("key6", func() interface{} { + fmt.Println(tree.GetVarOrSetFunc("key6", func() interface{} { return "val6" })) - // output: + // Output: // val1 // val6 } func ExampleBTree_GetVarOrSetFuncLock() { - newTree := gtree.NewBTree(3, gutil.ComparatorString) + tree := gtree.NewBTree(3, gutil.ComparatorString) for i := 0; i < 6; i++ { - newTree.Set("key"+gconv.String(i), "val"+gconv.String(i)) + tree.Set("key"+gconv.String(i), "val"+gconv.String(i)) } - fmt.Println(newTree.GetVarOrSetFuncLock("key1", func() interface{} { + fmt.Println(tree.GetVarOrSetFuncLock("key1", func() interface{} { return "newVal1" })) - fmt.Println(newTree.GetVarOrSetFuncLock("key6", func() interface{} { + fmt.Println(tree.GetVarOrSetFuncLock("key6", func() interface{} { return "val6" })) - // output: + // Output: // val1 // val6 } func ExampleBTree_SetIfNotExist() { - newTree := gtree.NewBTree(3, gutil.ComparatorString) + tree := gtree.NewBTree(3, gutil.ComparatorString) for i := 0; i < 6; i++ { - newTree.Set("key"+gconv.String(i), "val"+gconv.String(i)) + tree.Set("key"+gconv.String(i), "val"+gconv.String(i)) } - fmt.Println(newTree.SetIfNotExist("key1", "newVal1")) - fmt.Println(newTree.SetIfNotExist("key6", "val6")) + fmt.Println(tree.SetIfNotExist("key1", "newVal1")) + fmt.Println(tree.SetIfNotExist("key6", "val6")) - // output: + // Output: // false // true } func ExampleBTree_SetIfNotExistFunc() { - newTree := gtree.NewBTree(3, gutil.ComparatorString) + tree := gtree.NewBTree(3, gutil.ComparatorString) for i := 0; i < 6; i++ { - newTree.Set("key"+gconv.String(i), "val"+gconv.String(i)) + tree.Set("key"+gconv.String(i), "val"+gconv.String(i)) } - fmt.Println(newTree.SetIfNotExistFunc("key1", func() interface{} { + fmt.Println(tree.SetIfNotExistFunc("key1", func() interface{} { return "newVal1" })) - fmt.Println(newTree.SetIfNotExistFunc("key6", func() interface{} { + fmt.Println(tree.SetIfNotExistFunc("key6", func() interface{} { return "val6" })) - // output: + // Output: // false // true } func ExampleBTree_SetIfNotExistFuncLock() { - newTree := gtree.NewBTree(3, gutil.ComparatorString) + tree := gtree.NewBTree(3, gutil.ComparatorString) for i := 0; i < 6; i++ { - newTree.Set("key"+gconv.String(i), "val"+gconv.String(i)) + tree.Set("key"+gconv.String(i), "val"+gconv.String(i)) } - fmt.Println(newTree.SetIfNotExistFuncLock("key1", func() interface{} { + fmt.Println(tree.SetIfNotExistFuncLock("key1", func() interface{} { return "newVal1" })) - fmt.Println(newTree.SetIfNotExistFuncLock("key6", func() interface{} { + fmt.Println(tree.SetIfNotExistFuncLock("key6", func() interface{} { return "val6" })) - // output: + // Output: // false // true } func ExampleBTree_Contains() { - newTree := gtree.NewBTree(3, gutil.ComparatorString) + tree := gtree.NewBTree(3, gutil.ComparatorString) for i := 0; i < 6; i++ { - newTree.Set("key"+gconv.String(i), "val"+gconv.String(i)) + tree.Set("key"+gconv.String(i), "val"+gconv.String(i)) } - fmt.Println(newTree.Contains("key1")) - fmt.Println(newTree.Contains("key6")) + fmt.Println(tree.Contains("key1")) + fmt.Println(tree.Contains("key6")) - // output: + // Output: // true // false } func ExampleBTree_Remove() { - newTree := gtree.NewBTree(3, gutil.ComparatorString) + tree := gtree.NewBTree(3, gutil.ComparatorString) for i := 0; i < 6; i++ { - newTree.Set("key"+gconv.String(i), "val"+gconv.String(i)) + tree.Set("key"+gconv.String(i), "val"+gconv.String(i)) } - fmt.Println(newTree.Remove("key1")) - fmt.Println(newTree.Remove("key6")) - fmt.Println(newTree.Map()) + fmt.Println(tree.Remove("key1")) + fmt.Println(tree.Remove("key6")) + fmt.Println(tree.Map()) - // output: + // Output: // val1 // // map[key0:val0 key2:val2 key3:val3 key4:val4 key5:val5] } func ExampleBTree_Removes() { - newTree := gtree.NewBTree(3, gutil.ComparatorString) + tree := gtree.NewBTree(3, gutil.ComparatorString) for i := 0; i < 6; i++ { - newTree.Set("key"+gconv.String(i), "val"+gconv.String(i)) + tree.Set("key"+gconv.String(i), "val"+gconv.String(i)) } removeKeys := make([]interface{}, 2) removeKeys = append(removeKeys, "key1") removeKeys = append(removeKeys, "key6") - newTree.Removes(removeKeys) + tree.Removes(removeKeys) - fmt.Println(newTree.Map()) + fmt.Println(tree.Map()) - // output: + // Output: // map[key0:val0 key2:val2 key3:val3 key4:val4 key5:val5] } func ExampleBTree_IsEmpty() { - newTree := gtree.NewBTree(3, gutil.ComparatorString) + tree := gtree.NewBTree(3, gutil.ComparatorString) - fmt.Println(newTree.IsEmpty()) + fmt.Println(tree.IsEmpty()) for i := 0; i < 6; i++ { - newTree.Set("key"+gconv.String(i), "val"+gconv.String(i)) + tree.Set("key"+gconv.String(i), "val"+gconv.String(i)) } - fmt.Println(newTree.IsEmpty()) + fmt.Println(tree.IsEmpty()) - // output: + // Output: // true // false } func ExampleBTree_Size() { - newTree := gtree.NewBTree(3, gutil.ComparatorString) + tree := gtree.NewBTree(3, gutil.ComparatorString) - fmt.Println(newTree.Size()) + fmt.Println(tree.Size()) for i := 0; i < 6; i++ { - newTree.Set("key"+gconv.String(i), "val"+gconv.String(i)) + tree.Set("key"+gconv.String(i), "val"+gconv.String(i)) } - fmt.Println(newTree.Size()) + fmt.Println(tree.Size()) - // output: + // Output: // 0 // 6 } func ExampleBTree_Keys() { - newTree := gtree.NewBTree(3, gutil.ComparatorString) + tree := gtree.NewBTree(3, gutil.ComparatorString) for i := 6; i > 0; i-- { - newTree.Set("key"+gconv.String(i), "val"+gconv.String(i)) + tree.Set("key"+gconv.String(i), "val"+gconv.String(i)) } - fmt.Println(newTree.Keys()) + fmt.Println(tree.Keys()) - // output: + // Output: // [key1 key2 key3 key4 key5 key6] } func ExampleBTree_Values() { - newTree := gtree.NewBTree(3, gutil.ComparatorString) + tree := gtree.NewBTree(3, gutil.ComparatorString) for i := 6; i > 0; i-- { - newTree.Set("key"+gconv.String(i), "val"+gconv.String(i)) + tree.Set("key"+gconv.String(i), "val"+gconv.String(i)) } - fmt.Println(newTree.Values()) + fmt.Println(tree.Values()) - // output: + // Output: // [val1 val2 val3 val4 val5 val6] } func ExampleBTree_Map() { - newTree := gtree.NewBTree(3, gutil.ComparatorString) + tree := gtree.NewBTree(3, gutil.ComparatorString) for i := 0; i < 6; i++ { - newTree.Set("key"+gconv.String(i), "val"+gconv.String(i)) + tree.Set("key"+gconv.String(i), "val"+gconv.String(i)) } - fmt.Println(newTree.Map()) + fmt.Println(tree.Map()) - // output: + // Output: // map[key0:val0 key1:val1 key2:val2 key3:val3 key4:val4 key5:val5] } func ExampleBTree_MapStrAny() { - newTree := gtree.NewBTree(3, gutil.ComparatorString) + tree := gtree.NewBTree(3, gutil.ComparatorString) for i := 0; i < 6; i++ { - newTree.Set(1000+i, "val"+gconv.String(i)) + tree.Set(1000+i, "val"+gconv.String(i)) } - fmt.Println(newTree.MapStrAny()) + fmt.Println(tree.MapStrAny()) - // output: + // Output: // map[1000:val0 1001:val1 1002:val2 1003:val3 1004:val4 1005:val5] } func ExampleBTree_Clear() { - newTree := gtree.NewBTree(3, gutil.ComparatorString) + tree := gtree.NewBTree(3, gutil.ComparatorString) for i := 0; i < 6; i++ { - newTree.Set(1000+i, "val"+gconv.String(i)) + tree.Set(1000+i, "val"+gconv.String(i)) } - fmt.Println(newTree.Size()) + fmt.Println(tree.Size()) - newTree.Clear() - fmt.Println(newTree.Size()) + tree.Clear() + fmt.Println(tree.Size()) - // output: + // Output: // 6 // 0 } func ExampleBTree_Replace() { - newTree := gtree.NewBTree(3, gutil.ComparatorString) + tree := gtree.NewBTree(3, gutil.ComparatorString) for i := 0; i < 6; i++ { - newTree.Set("key"+gconv.String(i), "val"+gconv.String(i)) + tree.Set("key"+gconv.String(i), "val"+gconv.String(i)) } - fmt.Println(newTree.Map()) + fmt.Println(tree.Map()) data := map[interface{}]interface{}{ "newKey0": "newVal0", @@ -393,65 +393,65 @@ func ExampleBTree_Replace() { "newKey2": "newVal2", } - newTree.Replace(data) + tree.Replace(data) - fmt.Println(newTree.Map()) + fmt.Println(tree.Map()) - // output: + // Output: // map[key0:val0 key1:val1 key2:val2 key3:val3 key4:val4 key5:val5] // map[newKey0:newVal0 newKey1:newVal1 newKey2:newVal2] } func ExampleBTree_Height() { - newTree := gtree.NewBTree(3, gutil.ComparatorInt) + tree := gtree.NewBTree(3, gutil.ComparatorInt) for i := 0; i < 100; i++ { - newTree.Set(i, i) + tree.Set(i, i) } - fmt.Println(newTree.Height()) + fmt.Println(tree.Height()) - // output: + // Output: // 6 } func ExampleBTree_Left() { - newTree := gtree.NewBTree(3, gutil.ComparatorInt) + tree := gtree.NewBTree(3, gutil.ComparatorInt) for i := 1; i < 100; i++ { - newTree.Set(i, i) + tree.Set(i, i) } - fmt.Println(newTree.Left().Key, newTree.Left().Value) + fmt.Println(tree.Left().Key, tree.Left().Value) emptyTree := gtree.NewBTree(3, gutil.ComparatorInt) fmt.Println(emptyTree.Left()) - // output: + // Output: // 1 1 // } func ExampleBTree_Right() { - newTree := gtree.NewBTree(3, gutil.ComparatorInt) + tree := gtree.NewBTree(3, gutil.ComparatorInt) for i := 1; i < 100; i++ { - newTree.Set(i, i) + tree.Set(i, i) } - fmt.Println(newTree.Right().Key, newTree.Right().Value) + fmt.Println(tree.Right().Key, tree.Right().Value) emptyTree := gtree.NewBTree(3, gutil.ComparatorInt) fmt.Println(emptyTree.Left()) - // output: + // Output: // 99 99 // } func ExampleBTree_String() { - newTree := gtree.NewBTree(3, gutil.ComparatorString) + tree := gtree.NewBTree(3, gutil.ComparatorString) for i := 0; i < 6; i++ { - newTree.Set("key"+gconv.String(i), "val"+gconv.String(i)) + tree.Set("key"+gconv.String(i), "val"+gconv.String(i)) } - fmt.Println(newTree.String()) + fmt.Println(tree.String()) - // output: + // Output: // key0 // key1 // key2 @@ -461,28 +461,28 @@ func ExampleBTree_String() { } func ExampleBTree_Search() { - newTree := gtree.NewBTree(3, gutil.ComparatorString) + tree := gtree.NewBTree(3, gutil.ComparatorString) for i := 0; i < 6; i++ { - newTree.Set("key"+gconv.String(i), "val"+gconv.String(i)) + tree.Set("key"+gconv.String(i), "val"+gconv.String(i)) } - fmt.Println(newTree.Search("key0")) - fmt.Println(newTree.Search("key6")) + fmt.Println(tree.Search("key0")) + fmt.Println(tree.Search("key6")) - // output: + // Output: // val0 true // false } func ExampleBTree_Print() { - newTree := gtree.NewBTree(3, gutil.ComparatorString) + tree := gtree.NewBTree(3, gutil.ComparatorString) for i := 0; i < 6; i++ { - newTree.Set("key"+gconv.String(i), "val"+gconv.String(i)) + tree.Set("key"+gconv.String(i), "val"+gconv.String(i)) } - newTree.Print() + tree.Print() - // output: + // Output: // key0 // key1 // key2 @@ -492,13 +492,13 @@ func ExampleBTree_Print() { } func ExampleBTree_Iterator() { - newTree := gtree.NewBTree(3, gutil.ComparatorString) + tree := gtree.NewBTree(3, gutil.ComparatorString) for i := 0; i < 10; i++ { - newTree.Set(i, 10-i) + tree.Set(i, 10-i) } var totalKey, totalValue int - newTree.Iterator(func(key, value interface{}) bool { + tree.Iterator(func(key, value interface{}) bool { totalKey += key.(int) totalValue += value.(int) @@ -521,31 +521,25 @@ func ExampleBTree_IteratorFrom() { tree := gtree.NewBTreeFrom(3, gutil.ComparatorInt, m) tree.IteratorFrom(1, true, func(key, value interface{}) bool { - fmt.Println("key:", key) - fmt.Println("value:", value) + 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 + // key: 1 , value: 10 + // key: 2 , value: 20 + // key: 3 , value: 30 + // key: 4 , value: 40 + // key: 5 , value: 50 } func ExampleBTree_IteratorAsc() { - newTree := gtree.NewBTree(3, gutil.ComparatorString) + tree := gtree.NewBTree(3, gutil.ComparatorString) for i := 0; i < 10; i++ { - newTree.Set(i, 10-i) + tree.Set(i, 10-i) } - newTree.IteratorAsc(func(key, value interface{}) bool { + tree.IteratorAsc(func(key, value interface{}) bool { fmt.Println("key:", key, ", value:", value) return true }) @@ -619,12 +613,12 @@ func ExampleBTree_IteratorAscFrom_NoExistKeyAndMatchFalse() { } func ExampleBTree_IteratorDesc() { - newTree := gtree.NewBTree(3, gutil.ComparatorString) + tree := gtree.NewBTree(3, gutil.ComparatorString) for i := 0; i < 10; i++ { - newTree.Set(i, 10-i) + tree.Set(i, 10-i) } - newTree.IteratorDesc(func(key, value interface{}) bool { + tree.IteratorDesc(func(key, value interface{}) bool { fmt.Println("key:", key, ", value:", value) return true }) @@ -663,16 +657,16 @@ func ExampleBTree_IteratorDescFrom() { } func ExampleBTree_MarshalJSON() { - newTree := gtree.NewBTree(3, gutil.ComparatorString) + tree := gtree.NewBTree(3, gutil.ComparatorString) for i := 0; i < 6; i++ { - newTree.Set("key"+gconv.String(i), "val"+gconv.String(i)) + tree.Set("key"+gconv.String(i), "val"+gconv.String(i)) } - bytes, err := json.Marshal(newTree) + bytes, err := json.Marshal(tree) if err == nil { fmt.Println(gconv.String(bytes)) } - // output: + // Output: // {"key0":"val0","key1":"val1","key2":"val2","key3":"val3","key4":"val4","key5":"val5"} } diff --git a/container/gtree/gtree_z_example_test.go b/container/gtree/gtree_z_example_test.go index 412ed74c1..a6153a324 100644 --- a/container/gtree/gtree_z_example_test.go +++ b/container/gtree/gtree_z_example_test.go @@ -28,7 +28,7 @@ func ExampleNewBTree() { } fmt.Println(bTree.Map()) - // output: + // Output: // map[key0:val0 key1:val1 key2:val2 key3:val3 key4:val4 key5:val5] } @@ -41,7 +41,7 @@ func ExampleNewBTreeFrom() { otherBTree := gtree.NewBTreeFrom(3, gutil.ComparatorString, bTree.Map()) fmt.Println(otherBTree.Map()) - // output: + // Output: // map[key0:val0 key1:val1 key2:val2 key3:val3 key4:val4 key5:val5] }