新聞中心
這里有您想知道的互聯(lián)網(wǎng)營銷解決方案
創(chuàng)新互聯(lián)GoFrame教程:GoFramegset-方法介紹
以下常用方法列表,文檔更新可能滯后于代碼新特性,更多的方法及示例請參考代碼文檔:https://pkg.GO.dev/github.com/gogf/gf/v2/container/gset

成都創(chuàng)新互聯(lián)堅持“要么做到,要么別承諾”的工作理念,服務(wù)領(lǐng)域包括:網(wǎng)站設(shè)計、成都做網(wǎng)站、企業(yè)官網(wǎng)、英文網(wǎng)站、手機端網(wǎng)站、網(wǎng)站推廣等服務(wù),滿足客戶于互聯(lián)網(wǎng)時代的平南網(wǎng)站設(shè)計、移動媒體設(shè)計的需求,幫助企業(yè)找到有效的互聯(lián)網(wǎng)解決方案。努力成為您成熟可靠的網(wǎng)絡(luò)建設(shè)合作伙伴!
這里以?StrSet?類型介紹方法使用,其他集合類型的方法與此類似,不再贅述。
NewStrSet
- 說明:?
NewStrSet?創(chuàng)建并返回一個空的集合,其中包含沒有重復(fù)字符串的數(shù)據(jù)。參數(shù)?safe?用于指定是否在并發(fā)安全中使用,默認(rèn)情況下是?false?。 - 格式:
func NewStrSet(safe ...bool) *StrSet
- 示例:
func ExampleNewStrSet() {
strSet := gset.NewStrSet(true)
strSet.Add([]string{"str1", "str2", "str3"}...)
fmt.Println(strSet.Slice())
// May Output:
// [str3 str1 str2]
}
NewStrSetFrom
- 說明:?
NewStrSetFrom?通過給定的數(shù)組創(chuàng)建集合集合。參數(shù)safe用于指定是否在并發(fā)安全中使用,默認(rèn)情況下是?false?。 - 格式:
func NewStrSetFrom(items []string, safe ...bool) *StrSet
- 示例:
func ExampleNewStrSetFrom() {
strSet := gset.NewStrSetFrom([]string{"str1", "str2", "str3"}, true)
fmt.Println(strSet.Slice())
// May Output:
// [str1 str2 str3]
}
Add
- 說明:?
Add?添加一個或多個元素項到集合中。 - 格式:
func (set *StrSet) Add(item ...string)
- 示例:
func ExampleStrSet_Add() {
strSet := gset.NewStrSetFrom([]string{"str1", "str2", "str3"}, true)
strSet.Add("str")
fmt.Println(strSet.Slice())
fmt.Println(strSet.AddIfNotExist("str"))
// Mya Output:
// [str str1 str2 str3]
// false
}
AddIfNotExist
- 說明:?
Addifnotexist?檢查集合中是否存在指定元素項?item?,如果不存在則將?item?添加到集合中并返回?true?,否則什么也不做并返回?false?。 - 格式:
func (set *StrSet) AddIfNotExist(item string) bool
- 示例:
func ExampleStrSet_AddIfNotExist() {
strSet := gset.NewStrSetFrom([]string{"str1", "str2", "str3"}, true)
strSet.Add("str")
fmt.Println(strSet.Slice())
fmt.Println(strSet.AddIfNotExist("str"))
// Mya Output:
// [str str1 str2 str3]
// false
}
AddIfNotExistFunc
- 說明: ?
AddIfNotExistFunc?檢查集合中存在指定元素項?item?,如果不存在并且方法f返回?true?時,則將?item?設(shè)置到集合中并返回?true?,否則什么也不做并返回?false?。 - 格式:
func (set *StrSet) AddIfNotExistFunc(item string, f func() bool) bool
- 示例:
func ExampleStrSet_AddIfNotExistFunc() {
strSet := gset.NewStrSetFrom([]string{"str1", "str2", "str3"}, true)
strSet.Add("str")
fmt.Println(strSet.Slice())
fmt.Println(strSet.AddIfNotExistFunc("str5", func() bool {
return true
}))
// May Output:
// [str1 str2 str3 str]
// true
}
AddIfNotExistFuncLock
- 說明: ?
AddifnotExistFuncLock?與?AddIfNotExistFunc?類似,不過當(dāng)多個?goroutine?同時調(diào)用?AddifnotExistFuncLock?方法時,內(nèi)部使用并發(fā)安全鎖機制保證同時只能一個?goroutine?執(zhí)行。該方法只有在創(chuàng)建集合時的?safe?參數(shù)設(shè)置?true?時有效,否則表現(xiàn)和方法一致?AddIfNotExistFunc?。 - 格式:
func (set *StrSet) AddIfNotExistFuncLock(item string, f func() bool) bool
- 示例:
func ExampleStrSet_AddIfNotExistFuncLock() {
strSet := gset.NewStrSetFrom([]string{"str1", "str2", "str3"}, true)
strSet.Add("str")
fmt.Println(strSet.Slice())
fmt.Println(strSet.AddIfNotExistFuncLock("str4", func() bool {
return true
}))
// May Output:
// [str1 str2 str3 str]
// true
}
Clear
- 說明:?
Clear?刪除集合的所有元素項。 - 格式:
func (set *StrSet) Clear()
- 示例:
func ExampleStrSet_Clear() {
strSet := gset.NewStrSetFrom([]string{"str1", "str2", "str3"}, true)
fmt.Println(strSet.Size())
strSet.Clear()
fmt.Println(strSet.Size())
// Output:
// 3
// 0
}
Intersect
- 說明:?
Intrersect?執(zhí)行集合?set?與?others?的交集,并返回一個新的集合?newSet?,在?newSet?中的元素項同時存在于集合?set?與?others?中。 - 格式:
func (set *StrSet) Intersect(others ...*StrSet) (newSet *StrSet)
- 示例:
func ExampleStrSet_Intersect() {
s1 := gset.NewStrSet(true)
s1.Add([]string{"a", "b", "c"}...)
var s2 gset.StrSet
s2.Add([]string{"a", "b", "c", "d"}...)
fmt.Println(s2.Intersect(s1).Slice())
// May Output:
// [c a b]
}
Diff
- 說明:?
Diff?執(zhí)行集合?set?與?others?差集操作,并返回一個新的集合?newSet?。在?newSet?中的元素項存在于?set?但不存在于集合?others?。注意,參數(shù)?others?可以指定多個集合參數(shù)。 - 格式:
func (set *StrSet) Diff(others ...*StrSet) (newSet *StrSet)
- 示例:
func ExampleStrSet_Diff() {
s1 := gset.NewStrSetFrom([]string{"a", "b", "c"}, true)
s2 := gset.NewStrSetFrom([]string{"a", "b", "c", "d"}, true)
fmt.Println(s2.Diff(s1).Slice())
// Output:
// [d]
}
Union
- 說明:?
union?執(zhí)行集合?set?與?others?的并集操作,并返回一個新的集合?newSet?。 - 格式:
func (set *StrSet) Union(others ...*StrSet) (newSet *StrSet)
- 示例:
func ExampleStrSet_Union() {
s1 := gset.NewStrSet(true)
s1.Add([]string{"a", "b", "c", "d"}...)
s2 := gset.NewStrSet(true)
s2.Add([]string{"a", "b", "d"}...)
fmt.Println(s1.Union(s2).Slice())
// May Output:
// [a b c d]
}
Complement
- 說明:?
Complement?執(zhí)行?set?與?full?的補集操作,并返回一個新集合?newSet?。 - 格式:
func (set *StrSet) Complement(full *StrSet) (newSet *StrSet)
- 示例:
func ExampleStrSet_Complement() {
strSet := gset.NewStrSetFrom([]string{"str1", "str2", "str3", "str4", "str5"}, true)
s := gset.NewStrSetFrom([]string{"str1", "str2", "str3"}, true)
fmt.Println(s.Complement(strSet).Slice())
// May Output:
// [str4 str5]
}
Contains
- 說明:?
Contains?包含檢查集是否包含?item?。 - 格式:
func (set *StrSet) Contains(item string) bool
- 示例:
func ExampleStrSet_Contains() {
var set gset.StrSet
set.Add("a")
fmt.Println(set.Contains("a"))
fmt.Println(set.Contains("A"))
// Output:
// true
// false
}
ContainsI
- 說明: ?
ContainsI?方法類似于?Contains?,只是它不區(qū)分大小寫比較大小。 - 格式:
func (set *StrSet) ContainsI(item string) bool
- 示例:
func ExampleStrSet_ContainsI() {
var set gset.StrSet
set.Add("a")
fmt.Println(set.ContainsI("a"))
fmt.Println(set.ContainsI("A"))
// Output:
// true
// true
}
Equal
- 說明: ?
Equal?檢查兩個集合是否完全相等(包括大小以及元素項)。 - 格式:
func (set *StrSet) Equal(other *StrSet) bool
- 示例:
func ExampleStrSet_Equal() {
s1 := gset.NewStrSetFrom([]string{"a", "b", "c"}, true)
s2 := gset.NewStrSetFrom([]string{"a", "b", "c", "d"}, true)
fmt.Println(s2.Equal(s1))
s3 := gset.NewStrSetFrom([]string{"a", "b", "c"}, true)
s4 := gset.NewStrSetFrom([]string{"a", "b", "c"}, true)
fmt.Println(s3.Equal(s4))
// Output:
// false
// true
}
IsSubSetOf
- 說明:?
IsSumSetOf?檢查當(dāng)前集合?set?是否是指定集合?other?的子集。 - 格式:
func (set *StrSet) IsSubsetOf(other *StrSet) bool
- 示例:
func ExampleStrSet_IsSubsetOf() {
s1 := gset.NewStrSet(true)
s1.Add([]string{"a", "b", "c", "d"}...)
var s2 gset.StrSet
s2.Add([]string{"a", "b", "d"}...)
fmt.Println(s2.IsSubsetOf(s1))
// Output:
// true
}
Iterator
- 說明:?
Iterator?迭代器通過給定的回調(diào)函數(shù)f隨機遍歷當(dāng)前集合?set?,如果方法?f?返回?true?,則繼續(xù)遍歷,否則停止。 - 格式:
func (set *StrSet) Iterator(f func(v string) bool)
- 示例:
func ExampleStrSet_Iterator() {
s1 := gset.NewStrSet(true)
s1.Add([]string{"a", "b", "c", "d"}...)
s1.Iterator(func(v string) bool {
fmt.Println("Iterator", v)
return true
})
// May Output:
// Iterator a
// Iterator b
// Iterator c
// Iterator d
}
Join
- 說明:?
Join?將集合中的元素項通過字符串?glue?拼接成新的字符串返回。 - 格式:
func (set *StrSet) Join(glue string) string
- 示例:
func ExampleStrSet_Join() {
s1 := gset.NewStrSet(true)
s1.Add([]string{"a", "b", "c", "d"}...)
fmt.Println(s1.Join(","))
// May Output:
// b,c,d,a
}
LockFunc
- 說明:?
LockFunc?僅在并發(fā)安全場景下有用,該方法通過寫鎖鎖定集合?set?,并執(zhí)行回調(diào)方法?f?。 - 格式:
func (set *StrSet) LockFunc(f func(m map[string]struct{}))
- 示例:
func ExampleStrSet_LockFunc() {
s1 := gset.NewStrSet(true)
s1.Add([]string{"1", "2"}...)
s1.LockFunc(func(m map[string]struct{}) {
m["3"] = struct{}{}
})
fmt.Println(s1.Slice())
// May Output
// [2 3 1]
}
RLockFunc
- 說明:?
RLockFunc?僅在并發(fā)安全場景下有用,該方法通過讀鎖鎖定集合?set?,并執(zhí)行回調(diào)方法?f?。 - 格式:
func (set *StrSet) RLockFunc(f func(m map[string]struct{}))
- 示例:
func ExampleStrSet_RLockFunc() {
s1 := gset.NewStrSet(true)
s1.Add([]string{"a", "b", "c", "d"}...)
s1.RLockFunc(func(m map[string]struct{}) {
fmt.Println(m)
})
// Output:
// map[a:{} b:{} c:{} d:{}]
}
Merge
- 說明:?
Merge?將集合?others?中的所有元素項合并到?set?中。 - 格式:
func (set *StrSet) Merge(others ...*StrSet) *StrSet
- 示例:
func ExampleStrSet_Merge() {
s1 := gset.NewStrSet(true)
s1.Add([]string{"a", "b", "c", "d"}...)
s2 := gset.NewStrSet(true)
fmt.Println(s1.Merge(s2).Slice())
// May Output:
// [d a b c]
}
Pop
- 說明:?
Pop?隨機從集合中取出一個元素項。 - 格式:
func (set *StrSet) Pop() string
- 示例:
func ExampleStrSet_Pop() {
s1 := gset.NewStrSet(true)
s1.Add([]string{"a", "b", "c", "d"}...)
fmt.Println(s1.Pop())
// May Output:
// a
}
Pops
- 說明:?
Pops?從集合中隨機彈出?size?個元素項。如果?size == -1?,則返回所有元素項。 - 格式:
func (set *StrSet) Pops(size int) []string
- 示例:
func ExampleStrSet_Pops() {
s1 := gset.NewStrSet(true)
s1.Add([]string{"a", "b", "c", "d"}...)
for _, v := range s1.Pops(2) {
fmt.Println(v)
}
// May Output:
// a
// b
}
Remove
- 說明:?
Remove?從集合中刪除指定的元素項?item?。 - 格式:
func (set *StrSet) Remove(item string)
- 示例:
func ExampleStrSet_Remove() {
s1 := gset.NewStrSet(true)
s1.Add([]string{"a", "b", "c", "d"}...)
s1.Remove("a")
fmt.Println(s1.Slice())
// May Output:
// [b c d]
}
Size
- 說明:?
Size?返回集合的大小。 - 格式:
func (set *StrSet) Size() int
- 示例:
func ExampleStrSet_Size() {
s1 := gset.NewStrSet(true)
s1.Add([]string{"a", "b", "c", "d"}...)
fmt.Println(s1.Size())
// Output:
// 4
}
Silce
- 說明:?
Slice?將集合中的元素項以?slice?的形式返回。 - 格式:
func (set *StrSet) Slice() []string
- 示例:
func ExampleStrSet_Slice() {
s1 := gset.NewStrSet(true)
s1.Add([]string{"a", "b", "c", "d"}...)
fmt.Println(s1.Slice())
// May Output:
// [a,b,c,d]
}
String
- 說明:?
String?將集合按照字符串返回。 - 格式:
func (set *StrSet) String() string
- 示例:
func ExampleStrSet_String() {
s1 := gset.NewStrSet(true)
s1.Add([]string{"a", "b", "c", "d"}...)
fmt.Println(s1.String())
// May Output:
// "a","b","c","d"
}
Sum
- 說明:?
Sum?將集合中的元素項執(zhí)行求和,注意:只有元素項為數(shù)字時才有效,否則您將得到一個意想不到的結(jié)果。 - 格式:
func (set *StrSet) Sum() (sum int)
- 示例:
func ExampleStrSet_Sum() {
s1 := gset.NewStrSet(true)
s1.Add([]string{"1", "2", "3", "4"}...)
fmt.Println(s1.Sum())
// Output:
// 10
}
Walk
- 說明:?
Walk?按照用戶給定的回調(diào)方法f遍歷當(dāng)前集合,并將f的返回結(jié)果重新設(shè)置當(dāng)前集合。注意,在并發(fā)安全場景中,該方法內(nèi)部使用寫鎖來保證并發(fā)安全性。 - 格式:
func (set *StrSet) Walk(f func(item string) string) *StrSet
- 示例:
func ExampleStrSet_Walk() {
var (
set gset.StrSet
names = g.SliceStr{"user", "user_detail"}
prefix = "gf_"
)
set.Add(names...)
// Add prefix for given table names.
set.Walk(func(item string) string {
return prefix + item
})
fmt.Println(set.Slice())
// May Output:
// [gf_user gf_user_detail]
}
MarshalJSON
- 說明:?
MarshalJSON?實現(xiàn)了?json.Marshal?的?MarshalJSON?接口。 - 格式:
func (set *StrSet) MarshalJSON() ([]byte, error)
- 示例:
func ExampleStrSet_MarshalJSON() {
type Student struct {
Id int
Name string
Scores *gset.StrSet
}
s := Student{
Id: 1,
Name: "john",
Scores: gset.NewStrSetFrom([]string{"100", "99", "98"}, true),
}
b, _ := json.Marshal(s)
fmt.Println(string(b))
// May Output:
// {"Id":1,"Name":"john","Scores":["100","99","98"]}
}
UnmarshalJSON
- 說明:?
UnmarshalJSON?實現(xiàn)了?json.Unmarshal?中的?UnmarshalJSON?接口。 - 格式:
func (set *StrSet) UnmarshalJSON(b []byte) error
- 示例:
func ExampleStrSet_UnmarshalJSON() {
b := []byte(`{"Id":1,"Name":"john","Scores":["100","99","98"]}`)
type Student struct {
Id int
Name string
Scores *gset.StrSet
}
s := Student{}
json.Unmarshal(b, &s)
fmt.Println(s)
// May Output:
// {1 john "99","98","100"}
}
UnmarshalValue
- 說明: ?
UnfarshalValue?實現(xiàn)?GoFrame?框架內(nèi)部統(tǒng)一的設(shè)置接口,它通過一個?interface{}?類型的參數(shù)初始化當(dāng)前對象,至于?interface{}?參數(shù)的使用邏輯由該接口實現(xiàn)方法決定。 - 格式:
func (set *StrSet) UnmarshalValue(value interface{}) (err error)
- 示例:
func ExampleStrSet_UnmarshalValue() {
b := []byte(`{"Id":1,"Name":"john","Scores":["100","99","98"]}`)
type Student struct {
Id int
Name string
Scores *gset.StrSet
}
s := Student{}
json.Unmarshal(b, &s)
fmt.Println(s)
// May Output:
// {1 john "99","98","100"}
} 文章名稱:創(chuàng)新互聯(lián)GoFrame教程:GoFramegset-方法介紹
網(wǎng)頁URL:http://m.fisionsoft.com.cn/article/ccdggsj.html


咨詢
建站咨詢
