@@ -5,6 +5,7 @@ package set
55
66import (
77 "fmt"
8+ "sort"
89)
910
1011type person struct {
@@ -25,23 +26,122 @@ func ExampleHashSet_Insert() {
2526 s .Insert (& person {name : "dave" , id : 108 })
2627 s .Insert (& person {name : "armon" , id : 101 })
2728 s .Insert (& person {name : "mitchell" , id : 100 })
29+ s .Insert (& person {name : "armon" , id : 101 })
2830
2931 fmt .Println (s )
32+
3033 // Output:
3134 // [armon dave mitchell]
3235}
3336
34- // InsertSlice
37+ func ExampleHashSet_InsertSlice () {
38+ s := NewHashSet [* person , string ](10 )
39+ s .InsertSlice ([]* person {
40+ {name : "dave" , id : 108 },
41+ {name : "mitchell" , id : 100 },
42+ {name : "dave" , id : 108 },
43+ {name : "armon" , id : 101 },
44+ })
45+
46+ fmt .Println (s )
47+
48+ // Output:
49+ // [armon dave mitchell]
50+ }
51+
52+ func ExampleHashSet_InsertSet () {
53+ anna := & person {name : "anna" , id : 94 }
54+ bill := & person {name : "bill" , id : 50 }
55+ carl := & person {name : "carl" , id : 10 }
56+ dave := & person {name : "dave" , id : 32 }
57+ s1 := HashSetFrom [* person , string ]([]* person {anna , carl })
58+ s2 := HashSetFrom [* person , string ]([]* person {carl , dave , bill })
59+ s2 .InsertSet (s1 )
60+
61+ fmt .Println (s1 )
62+ fmt .Println (s2 )
63+
64+ // Output:
65+ // [anna carl]
66+ // [anna bill carl dave]
67+ }
68+
69+ func ExampleHashSet_Remove () {
70+ anna := & person {name : "anna" , id : 94 }
71+ bill := & person {name : "bill" , id : 50 }
72+ carl := & person {name : "carl" , id : 10 }
73+ dave := & person {name : "dave" , id : 32 }
74+ s := HashSetFrom [* person , string ]([]* person {anna , carl , dave , bill })
75+
76+ fmt .Println (s )
77+
78+ s .Remove (carl )
79+
80+ fmt .Println (s )
81+
82+ // Output:
83+ // [anna bill carl dave]
84+ // [anna bill dave]
85+ }
86+
87+ func ExampleHashSet_RemoveSlice () {
88+ anna := & person {name : "anna" , id : 94 }
89+ bill := & person {name : "bill" , id : 50 }
90+ carl := & person {name : "carl" , id : 10 }
91+ dave := & person {name : "dave" , id : 32 }
92+ s := HashSetFrom [* person , string ]([]* person {anna , carl , dave , bill })
93+
94+ fmt .Println (s )
95+
96+ s .RemoveSlice ([]* person {anna , carl })
97+
98+ fmt .Println (s )
99+
100+ // Output:
101+ // [anna bill carl dave]
102+ // [bill dave]
103+ }
104+
105+ func ExampleHashSet_RemoveSet () {
106+ anna := & person {name : "anna" , id : 94 }
107+ bill := & person {name : "bill" , id : 50 }
108+ carl := & person {name : "carl" , id : 10 }
109+ dave := & person {name : "dave" , id : 32 }
110+ s := HashSetFrom [* person , string ]([]* person {carl , dave , bill })
111+ r := HashSetFrom [* person , string ]([]* person {anna , carl })
112+
113+ fmt .Println (s )
114+
115+ s .RemoveSet (r )
116+
117+ fmt .Println (s )
118+
119+ // Output:
120+ // [bill carl dave]
121+ // [bill dave]
122+ }
35123
36- // InsertSet
124+ func ExampleHashSet_RemoveFunc () {
125+ anna := & person {name : "anna" , id : 94 }
126+ bill := & person {name : "bill" , id : 50 }
127+ carl := & person {name : "carl" , id : 10 }
128+ dave := & person {name : "dave" , id : 32 }
129+ s := HashSetFrom [* person , string ]([]* person {anna , bill , carl , dave })
37130
38- // Remove
131+ idAbove50 := func (p * person ) bool {
132+ return p .id >= 50
133+ }
39134
40- // RemoveSlice
135+ fmt . Println ( s )
41136
42- // RemoveSet
137+ s . RemoveFunc ( idAbove50 )
43138
44- // RemoveFunc
139+ fmt .Println (s )
140+
141+ // Output:
142+ // [anna bill carl dave]
143+ // [carl dave]
144+ }
45145
46146func ExampleHashSet_Contains () {
47147 anna := & person {name : "anna" , id : 94 }
@@ -58,26 +158,189 @@ func ExampleHashSet_Contains() {
58158 // false
59159}
60160
61- // ContainsAll
161+ func ExampleHashSet_ContainsAll () {
162+ anna := & person {name : "anna" , id : 94 }
163+ bill := & person {name : "bill" , id : 50 }
164+ carl := & person {name : "carl" , id : 10 }
165+ dave := & person {name : "dave" , id : 32 }
166+ s := HashSetFrom [* person , string ]([]* person {anna , bill , carl })
167+
168+ fmt .Println (s .ContainsAll ([]* person {anna , bill }))
169+ fmt .Println (s .ContainsAll ([]* person {anna , dave }))
170+
171+ // Output:
172+ // true
173+ // false
174+ }
175+
176+ func ExampleHashSet_ContainsSlice () {
177+ anna := & person {name : "anna" , id : 94 }
178+ bill := & person {name : "bill" , id : 50 }
179+ carl := & person {name : "carl" , id : 10 }
180+ dave := & person {name : "dave" , id : 32 }
181+ s := HashSetFrom [* person , string ]([]* person {anna , bill , carl })
182+
183+ fmt .Println (s .ContainsSlice ([]* person {anna , bill }))
184+ fmt .Println (s .ContainsSlice ([]* person {anna , bill , carl }))
185+ fmt .Println (s .ContainsSlice ([]* person {carl , dave }))
186+
187+ // Output:
188+ // false
189+ // true
190+ // false
191+ }
192+
193+ func ExampleHashSet_Subset () {
194+ anna := & person {name : "anna" , id : 94 }
195+ bill := & person {name : "bill" , id : 50 }
196+ carl := & person {name : "carl" , id : 10 }
197+ dave := & person {name : "dave" , id : 32 }
198+ s1 := HashSetFrom [* person , string ]([]* person {anna , bill , carl })
199+ s2 := HashSetFrom [* person , string ]([]* person {anna , bill })
200+ s3 := HashSetFrom [* person , string ]([]* person {bill , carl , dave })
201+
202+ fmt .Println (s1 .Subset (s2 ))
203+ fmt .Println (s1 .Subset (s3 ))
204+
205+ // Output:
206+ // true
207+ // false
208+ }
209+
210+ func ExampleHashSet_Size () {
211+ anna := & person {name : "anna" , id : 94 }
212+ bill := & person {name : "bill" , id : 50 }
213+ carl := & person {name : "carl" , id : 10 }
214+ s := HashSetFrom [* person , string ]([]* person {anna , bill , carl })
215+
216+ fmt .Println (s .Size ())
217+
218+ // Output:
219+ // 3
220+ }
221+
222+ func ExampleHashSet_Empty () {
223+ s := NewHashSet [* person , string ](0 )
224+
225+ fmt .Println (s .Empty ())
226+
227+ // Output:
228+ // true
229+ }
230+
231+ func ExampleHashSet_Union () {
232+ anna := & person {name : "anna" , id : 94 }
233+ bill := & person {name : "bill" , id : 50 }
234+ carl := & person {name : "carl" , id : 10 }
235+ dave := & person {name : "dave" , id : 32 }
236+ s1 := HashSetFrom [* person , string ]([]* person {anna , bill , carl })
237+ s2 := HashSetFrom [* person , string ]([]* person {anna , bill , dave })
238+ union := s1 .Union (s2 )
239+
240+ fmt .Println (s1 )
241+ fmt .Println (s2 )
242+ fmt .Println (union )
243+
244+ // Output:
245+ // [anna bill carl]
246+ // [anna bill dave]
247+ // [anna bill carl dave]
248+ }
249+
250+ func ExampleHashSet_Difference () {
251+ anna := & person {name : "anna" , id : 94 }
252+ bill := & person {name : "bill" , id : 50 }
253+ carl := & person {name : "carl" , id : 10 }
254+ dave := & person {name : "dave" , id : 32 }
255+ s1 := HashSetFrom [* person , string ]([]* person {anna , bill , carl })
256+ s2 := HashSetFrom [* person , string ]([]* person {anna , bill , dave })
257+ difference := s1 .Difference (s2 )
258+
259+ fmt .Println (s1 )
260+ fmt .Println (s2 )
261+ fmt .Println (difference )
262+
263+ // Output:
264+ // [anna bill carl]
265+ // [anna bill dave]
266+ // [carl]
267+ }
268+
269+ func ExampleHashSet_Intersect () {
270+ anna := & person {name : "anna" , id : 94 }
271+ bill := & person {name : "bill" , id : 50 }
272+ carl := & person {name : "carl" , id : 10 }
273+ dave := & person {name : "dave" , id : 32 }
274+ s1 := HashSetFrom [* person , string ]([]* person {anna , bill , carl })
275+ s2 := HashSetFrom [* person , string ]([]* person {anna , bill , dave })
276+ intersect := s1 .Intersect (s2 )
62277
63- // ContainsSlice
278+ fmt .Println (s1 )
279+ fmt .Println (s2 )
280+ fmt .Println (intersect )
64281
65- // Subset
282+ // Output:
283+ // [anna bill carl]
284+ // [anna bill dave]
285+ // [anna bill]
286+ }
66287
67- // Size
288+ func ExampleHashSet_Equal () {
289+ anna := & person {name : "anna" , id : 94 }
290+ bill := & person {name : "bill" , id : 50 }
291+ carl := & person {name : "carl" , id : 10 }
292+ dave := & person {name : "dave" , id : 32 }
68293
69- // Empty
294+ s1 := HashSetFrom [* person , string ]([]* person {anna , bill , carl })
295+ s2 := HashSetFrom [* person , string ]([]* person {anna , bill , carl })
296+ s3 := HashSetFrom [* person , string ]([]* person {anna , bill , dave })
70297
71- // Union
298+ fmt .Println (s1 .Equal (s2 ))
299+ fmt .Println (s1 .Equal (s3 ))
72300
73- // Difference
301+ // Output:
302+ // true
303+ // false
304+ }
74305
75- // Intersect
306+ func ExampleHashSet_Copy () {
307+ anna := & person {name : "anna" , id : 94 }
308+ bill := & person {name : "bill" , id : 50 }
309+ carl := & person {name : "carl" , id : 10 }
310+ s := HashSetFrom [* person , string ]([]* person {anna , bill , carl })
311+ c := s .Copy ()
76312
77- // Equal
313+ fmt . Println ( c )
78314
79- // Copy
315+ // Output:
316+ // [anna bill carl]
317+ }
80318
81- // Slice
319+ func ExampleHashSet_Slice () {
320+ anna := & person {name : "anna" , id : 94 }
321+ bill := & person {name : "bill" , id : 50 }
322+ carl := & person {name : "carl" , id : 10 }
323+ s := HashSetFrom [* person , string ]([]* person {anna , bill , carl })
324+
325+ slice := s .Slice ()
326+ sort .Slice (slice , func (a , b int ) bool {
327+ return slice [a ].id < slice [b ].id
328+ })
82329
83- // String
330+ fmt .Println (slice )
331+
332+ // Output:
333+ // [carl bill anna]
334+ }
335+
336+ func ExampleHashSet_String () {
337+ anna := & person {name : "anna" , id : 94 }
338+ bill := & person {name : "bill" , id : 50 }
339+ carl := & person {name : "carl" , id : 10 }
340+ s := HashSetFrom [* person , string ]([]* person {anna , bill , carl })
341+
342+ fmt .Println (s .String ())
343+
344+ // Output:
345+ // [anna bill carl]
346+ }
0 commit comments