61 lines
1.4 KiB
Go
61 lines
1.4 KiB
Go
package main
|
||
|
||
import (
|
||
"fmt"
|
||
|
||
"golang.org/x/tools/container/intsets"
|
||
)
|
||
|
||
func main() {
|
||
var s0, s1 intsets.Sparse // create some empty sets
|
||
s1.Insert(3) // insert an element
|
||
s2 := newSet(3, 1) // create sets with elements
|
||
s3 := newSet(3, 1, 4, 1, 5, 9)
|
||
|
||
// output
|
||
fmt.Println("s0:", &s0)
|
||
fmt.Println("s1:", &s1)
|
||
fmt.Println("s2:", s2)
|
||
fmt.Println("s3:", s3)
|
||
|
||
// element predicate
|
||
fmt.Printf("%v ∈ s0: %t\n", 3, s0.Has(3))
|
||
fmt.Printf("%v ∈ s3: %t\n", 3, s3.Has(3))
|
||
fmt.Printf("%v ∈ s3: %t\n", 2, s3.Has(2))
|
||
|
||
// union
|
||
b := newSet(4, 2)
|
||
var s intsets.Sparse
|
||
s.Union(s3, b)
|
||
fmt.Printf("s3 ∪ %v: %v\n", b, &s)
|
||
|
||
// intersection
|
||
s.Intersection(s3, b)
|
||
fmt.Printf("s3 ∩ %v: %v\n", b, &s)
|
||
|
||
// difference
|
||
s.Difference(s3, b)
|
||
fmt.Printf("s3 \\ %v: %v\n", b, &s)
|
||
|
||
// subset predicate
|
||
fmt.Printf("%v ⊆ s3: %t\n", b, b.SubsetOf(s3))
|
||
fmt.Printf("%v ⊆ s3: %t\n", s2, s2.SubsetOf(s3))
|
||
fmt.Printf("%v ⊆ s3: %t\n", &s0, s0.SubsetOf(s3))
|
||
|
||
// equality
|
||
s2Same := newSet(1, 3)
|
||
fmt.Printf("%v = s2: %t\n", s2Same, s2Same.Equals(s2))
|
||
|
||
// delete
|
||
s3.Remove(3)
|
||
fmt.Println("s3, 3 removed:", s3)
|
||
}
|
||
|
||
func newSet(ms ...int) *intsets.Sparse {
|
||
var set intsets.Sparse
|
||
for _, m := range ms {
|
||
set.Insert(m)
|
||
}
|
||
return &set
|
||
}
|