diff --git a/g/container/gset/gset.go b/g/container/gset/gset.go index 3484d08b0..7f01bc45d 100644 --- a/g/container/gset/gset.go +++ b/g/container/gset/gset.go @@ -297,8 +297,31 @@ func (set *Set) Sum() (sum int) { return } -// Join joins items with a string . +// Pops randomly pops an item from set. +func (set *Set) Pop(size int) interface{} { + set.mu.RLock() + defer set.mu.RUnlock() + for k, _ := range set.m { + return k + } + return nil +} + +// Pops randomly pops items from set. func (set *Set) Pops(size int) []interface{} { - array := make([]interface{}, 0, size) + set.mu.RLock() + defer set.mu.RUnlock() + if size > len(set.m) { + size = len(set.m) + } + index := 0 + array := make([]interface{}, size) + for k, _ := range set.m { + array[index] = k + index++ + if index == size { + break + } + } return array } \ No newline at end of file diff --git a/g/container/gset/gset_int_set.go b/g/container/gset/gset_int_set.go index dd9a19195..6e018d5fa 100644 --- a/g/container/gset/gset_int_set.go +++ b/g/container/gset/gset_int_set.go @@ -289,4 +289,33 @@ func (set *IntSet) Sum() (sum int) { sum += k } return +} + +// Pops randomly pops an item from set. +func (set *IntSet) Pop(size int) int { + set.mu.RLock() + defer set.mu.RUnlock() + for k, _ := range set.m { + return k + } + return 0 +} + +// Pops randomly pops items from set. +func (set *IntSet) Pops(size int) []int { + set.mu.RLock() + defer set.mu.RUnlock() + if size > len(set.m) { + size = len(set.m) + } + index := 0 + array := make([]int, size) + for k, _ := range set.m { + array[index] = k + index++ + if index == size { + break + } + } + return array } \ No newline at end of file diff --git a/g/container/gset/gset_string_set.go b/g/container/gset/gset_string_set.go index fbd63a227..4664e5808 100644 --- a/g/container/gset/gset_string_set.go +++ b/g/container/gset/gset_string_set.go @@ -290,4 +290,33 @@ func (set *StringSet) Sum() (sum int) { sum += gconv.Int(k) } return +} + +// Pops randomly pops an item from set. +func (set *StringSet) Pop(size int) string { + set.mu.RLock() + defer set.mu.RUnlock() + for k, _ := range set.m { + return k + } + return "" +} + +// Pops randomly pops items from set. +func (set *StringSet) Pops(size int) []string { + set.mu.RLock() + defer set.mu.RUnlock() + if size > len(set.m) { + size = len(set.m) + } + index := 0 + array := make([]string, size) + for k, _ := range set.m { + array[index] = k + index++ + if index == size { + break + } + } + return array } \ No newline at end of file diff --git a/geg/other/test.go b/geg/other/test.go index 5d308c6db..18343ac6c 100644 --- a/geg/other/test.go +++ b/geg/other/test.go @@ -2,15 +2,10 @@ package main import ( "fmt" - "github.com/gogf/gf/g/os/gfile" - "time" ) func main() { - go func() { - go func() { - fmt.Println("main:", gfile.MainPkgPath()) - }() - }() - time.Sleep(time.Second) + array := make([]interface{}, 0, 10) + array[8] = 1 + fmt.Println(array) } \ No newline at end of file