diff --git a/g/container/garray/garray_sorted_int.go b/g/container/garray/garray_sorted_int.go index bb7304220..a8a68bb1c 100644 --- a/g/container/garray/garray_sorted_int.go +++ b/g/container/garray/garray_sorted_int.go @@ -99,6 +99,7 @@ func (a *SortedIntArray) Slice() []int { } // 查找指定数值的索引位置,返回索引位置(具体匹配位置或者最后对比位置)及查找结果 +// 返回值: 最后比较位置, 比较结果 func (a *SortedIntArray) Search(value int) (int, int) { if len(a.array) == 0 { return -1, -2 @@ -109,21 +110,16 @@ func (a *SortedIntArray) Search(value int) (int, int) { mid := 0 cmp := -2 for { + mid = int((min + max) / 2) + cmp = a.compareFunc(value, a.array[mid]) + switch cmp { + case -1 : max = mid - 1 + case 0 : + case 1 : min = mid + 1 + } if cmp == 0 || min > max { break } - for { - mid = int((min + max) / 2) - cmp = a.compareFunc(value, a.array[mid]) - switch cmp { - case -1 : max = mid - 1 - case 0 : - case 1 : min = mid + 1 - } - if cmp == 0 || min > max { - break - } - } } a.mu.RUnlock() return mid, cmp diff --git a/g/container/garray/garray_sorted_interface.go b/g/container/garray/garray_sorted_interface.go index 3fbc886a0..5dba9b570 100644 --- a/g/container/garray/garray_sorted_interface.go +++ b/g/container/garray/garray_sorted_interface.go @@ -84,6 +84,7 @@ func (a *SortedArray) Slice() []interface{} { } // 查找指定数值的索引位置,返回索引位置(具体匹配位置或者最后对比位置)及查找结果 +// 返回值: 最后比较位置, 比较结果 func (a *SortedArray) Search(value interface{}) (int, int) { if len(a.array) == 0 { return -1, -2 @@ -94,21 +95,16 @@ func (a *SortedArray) Search(value interface{}) (int, int) { mid := 0 cmp := -2 for { + mid = int((min + max) / 2) + cmp = a.compareFunc(value, a.array[mid]) + switch cmp { + case -1 : max = mid - 1 + case 0 : + case 1 : min = mid + 1 + } if cmp == 0 || min > max { break } - for { - mid = int((min + max) / 2) - cmp = a.compareFunc(value, a.array[mid]) - switch cmp { - case -1 : max = mid - 1 - case 0 : - case 1 : min = mid + 1 - } - if cmp == 0 || min > max { - break - } - } } a.mu.RUnlock() return mid, cmp diff --git a/g/container/garray/garray_sorted_string.go b/g/container/garray/garray_sorted_string.go index 28462b95e..4d7e87391 100644 --- a/g/container/garray/garray_sorted_string.go +++ b/g/container/garray/garray_sorted_string.go @@ -94,6 +94,7 @@ func (a *SortedStringArray) Slice() []string { } // 查找指定数值的索引位置,返回索引位置(具体匹配位置或者最后对比位置)及查找结果 +// 返回值: 最后比较位置, 比较结果 func (a *SortedStringArray) Search(value string) (int, int) { if len(a.array) == 0 { return -1, -2 @@ -104,21 +105,16 @@ func (a *SortedStringArray) Search(value string) (int, int) { mid := 0 cmp := -2 for { + mid = int((min + max) / 2) + cmp = a.compareFunc(value, a.array[mid]) + switch cmp { + case -1 : max = mid - 1 + case 0 : + case 1 : min = mid + 1 + } if cmp == 0 || min > max { break } - for { - mid = int((min + max) / 2) - cmp = a.compareFunc(value, a.array[mid]) - switch cmp { - case -1 : max = mid - 1 - case 0 : - case 1 : min = mid + 1 - } - if cmp == 0 || min > max { - break - } - } } a.mu.RUnlock() return mid, cmp diff --git a/geg/container/garray/garray.go b/geg/container/garray/garray1.go similarity index 100% rename from geg/container/garray/garray.go rename to geg/container/garray/garray1.go diff --git a/geg/container/garray/garray2.go b/geg/container/garray/garray2.go new file mode 100644 index 000000000..185add539 --- /dev/null +++ b/geg/container/garray/garray2.go @@ -0,0 +1,14 @@ +package main + +import ( + "fmt" + "gitee.com/johng/gf/g/container/garray" +) + + +func main () { + a := garray.NewSortedIntArray(0) + a.Add(0) + fmt.Println(a.Slice()) + fmt.Println(a.Search(0)) +}