From 16dd4a92c1712c56eaa5d2d45a860595b6aa3a9c Mon Sep 17 00:00:00 2001 From: john Date: Sun, 30 Sep 2018 16:49:34 +0800 Subject: [PATCH] =?UTF-8?q?=E5=8E=BB=E6=8E=89garray=E6=8E=92=E5=BA=8F?= =?UTF-8?q?=E6=95=B0=E7=BB=84=E7=9A=84length=E5=B1=9E=E6=80=A7?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- g/container/garray/garray_sorted_int.go | 18 +++-------------- g/container/garray/garray_sorted_interface.go | 11 +++------- g/container/garray/garray_sorted_string.go | 20 ++++--------------- geg/other/test.go | 7 ++++--- geg/other/test2.go | 12 ----------- geg/other/test_test.go | 19 ++++++++++++++++++ 6 files changed, 33 insertions(+), 54 deletions(-) delete mode 100644 geg/other/test2.go create mode 100644 geg/other/test_test.go diff --git a/g/container/garray/garray_sorted_int.go b/g/container/garray/garray_sorted_int.go index 36bdaf147..e7ad776fc 100644 --- a/g/container/garray/garray_sorted_int.go +++ b/g/container/garray/garray_sorted_int.go @@ -15,7 +15,6 @@ import ( type SortedIntArray struct { mu *rwmutex.RWMutex // 互斥锁 cap int // 初始化设置的数组容量 - size int // 初始化设置的数组大小 array []int // 底层数组 unique *gtype.Bool // 是否要求不能重复 compareFunc func(v1, v2 int) int // 比较函数,返回值 -1: v1 < v2;0: v1 == v2;1: v1 > v2 @@ -23,8 +22,9 @@ type SortedIntArray struct { // 创建一个排序的int数组 func NewSortedIntArray(size int, cap int, safe...bool) *SortedIntArray { - a := &SortedIntArray { + return &SortedIntArray { mu : rwmutex.New(safe...), + array : make([]int, 0, cap), unique : gtype.NewBool(), compareFunc : func(v1, v2 int) int { if v1 < v2 { @@ -36,14 +36,6 @@ func NewSortedIntArray(size int, cap int, safe...bool) *SortedIntArray { return 0 }, } - a.size = size - if cap > 0 { - a.cap = cap - a.array = make([]int, size, cap) - } else { - a.array = make([]int, size) - } - return a } // 添加加数据项 @@ -168,11 +160,7 @@ func (a *SortedIntArray) doUnique() { // 清空数据数组 func (a *SortedIntArray) Clear() { a.mu.Lock() - if a.cap > 0 { - a.array = make([]int, a.size, a.cap) - } else { - a.array = make([]int, a.size) - } + a.array = make([]int, 0, a.cap) a.mu.Unlock() } diff --git a/g/container/garray/garray_sorted_interface.go b/g/container/garray/garray_sorted_interface.go index 3599e63ce..a2970477e 100644 --- a/g/container/garray/garray_sorted_interface.go +++ b/g/container/garray/garray_sorted_interface.go @@ -15,17 +15,16 @@ import ( type SortedArray struct { mu *rwmutex.RWMutex // 互斥锁 cap int // 初始化设置的数组容量 - size int // 初始化设置的数组大小 array []interface{} // 底层数组 unique *gtype.Bool // 是否要求不能重复 compareFunc func(v1, v2 interface{}) int // 比较函数,返回值 -1: v1 < v2;0: v1 == v2;1: v1 > v2 } -func NewSortedArray(size int, cap int, compareFunc func(v1, v2 interface{}) int, safe...bool) *SortedArray { +func NewSortedArray(cap int, compareFunc func(v1, v2 interface{}) int, safe...bool) *SortedArray { return &SortedArray{ mu : rwmutex.New(safe...), unique : gtype.NewBool(), - array : make([]interface{}, size, cap), + array : make([]interface{}, 0, cap), compareFunc : compareFunc, } } @@ -152,11 +151,7 @@ func (a *SortedArray) doUnique() { // 清空数据数组 func (a *SortedArray) Clear() { a.mu.Lock() - if a.cap > 0 { - a.array = make([]interface{}, a.size, a.cap) - } else { - a.array = make([]interface{}, a.size) - } + a.array = make([]interface{}, 0, a.cap) a.mu.Unlock() } diff --git a/g/container/garray/garray_sorted_string.go b/g/container/garray/garray_sorted_string.go index b5b546414..687b07256 100644 --- a/g/container/garray/garray_sorted_string.go +++ b/g/container/garray/garray_sorted_string.go @@ -16,28 +16,20 @@ import ( type SortedStringArray struct { mu *rwmutex.RWMutex // 互斥锁 cap int // 初始化设置的数组容量 - size int // 初始化设置的数组大小 array []string // 底层数组 unique *gtype.Bool // 是否要求不能重复 compareFunc func(v1, v2 string) int // 比较函数,返回值 -1: v1 < v2;0: v1 == v2;1: v1 > v2 } -func NewSortedStringArray(size int, cap int, safe...bool) *SortedStringArray { - a := &SortedStringArray { +func NewSortedStringArray(cap int, safe...bool) *SortedStringArray { + return &SortedStringArray { mu : rwmutex.New(safe...), + array : make([]string, 0, cap), unique : gtype.NewBool(), compareFunc : func(v1, v2 string) int { return strings.Compare(v1, v2) }, } - a.size = size - if cap > 0 { - a.cap = cap - a.array = make([]string, size, cap) - } else { - a.array = make([]string, size) - } - return a } // 添加加数据项 @@ -161,11 +153,7 @@ func (a *SortedStringArray) doUnique() { // 清空数据数组 func (a *SortedStringArray) Clear() { a.mu.Lock() - if a.cap > 0 { - a.array = make([]string, a.size, a.cap) - } else { - a.array = make([]string, a.size) - } + a.array = make([]string, 0, a.cap) a.mu.Unlock() } diff --git a/geg/other/test.go b/geg/other/test.go index 3e7a07cfb..4e1dd2b7d 100644 --- a/geg/other/test.go +++ b/geg/other/test.go @@ -9,11 +9,12 @@ type S struct { } + + func main() { var source = []string{"59705a2c1fd50736a4c768a1", "597a95ff1fd5073e48bb2272", "597a960f1fd5073e48bb2274"} - var CacheChannelKeys *garray.SortedStringArray - CacheChannelKeys = garray.NewSortedStringArray(0, 0) + var CacheChannelKeys = garray.NewSortedStringArray(3) CacheChannelKeys.Add(source...) - fmt.Println(CacheChannelKeys.Slice()) + fmt.Println(CacheChannelKeys.Len()) } diff --git a/geg/other/test2.go b/geg/other/test2.go deleted file mode 100644 index 8b6c1388b..000000000 --- a/geg/other/test2.go +++ /dev/null @@ -1,12 +0,0 @@ -package main - -import ( - "gitee.com/johng/gf/g/encoding/gjson" -) - -func main() { - j := gjson.New(nil) - j.Set("array", []int{1,2,3}) - j.Append("array", 4) - j.Dump() -} \ No newline at end of file diff --git a/geg/other/test_test.go b/geg/other/test_test.go new file mode 100644 index 000000000..8fb18c4b0 --- /dev/null +++ b/geg/other/test_test.go @@ -0,0 +1,19 @@ +package main + +import ( + "testing" + "gitee.com/johng/gf/g/container/garray" +) + +func TestGFArray001(t *testing.T) { + var source = []string{"59705a2c1fd50736a4c768a1", "597a95ff1fd5073e48bb2272", "597a960f1fd5073e48bb2274"} + var CacheChannelKeys = garray.NewSortedStringArray(0) + CacheChannelKeys.Add(source...) + t.Logf("%#v\n", CacheChannelKeys) + + CacheChannelKeys.Clear() + CacheChannelKeys = garray.NewSortedStringArray(len(source)) + t.Logf("%#v\n", CacheChannelKeys) + CacheChannelKeys.Add(source...) + t.Logf("%#v\n", CacheChannelKeys) +} \ No newline at end of file