add Pop/Pops functions for gset

This commit is contained in:
John
2019-04-26 08:57:48 +08:00
parent dd34ac1722
commit 66306464e1
4 changed files with 86 additions and 10 deletions

View File

@ -297,8 +297,31 @@ func (set *Set) Sum() (sum int) {
return
}
// Join joins items with a string <glue>.
// 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 <size> 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
}

View File

@ -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 <size> 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
}

View File

@ -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 <size> 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
}

View File

@ -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)
}