summaryrefslogtreecommitdiff
path: root/go/strain/strain.go
diff options
context:
space:
mode:
Diffstat (limited to 'go/strain/strain.go')
-rw-r--r--go/strain/strain.go59
1 files changed, 59 insertions, 0 deletions
diff --git a/go/strain/strain.go b/go/strain/strain.go
new file mode 100644
index 0000000..487b190
--- /dev/null
+++ b/go/strain/strain.go
@@ -0,0 +1,59 @@
+package strain
+
+type Ints []int
+
+func (i Ints) Keep(f func(int) bool) Ints {
+ r := Ints{}
+ for _, v := range i {
+ if f(v) {
+ r = append(r, v)
+ }
+ }
+ if len(r) == 0 {
+ return nil
+ }
+ return r
+}
+
+func (i Ints) Discard(f func(int) bool) Ints {
+ r := Ints{}
+ for _, v := range i {
+ if !f(v) {
+ r = append(r, v)
+ }
+ }
+ if len(r) == 0 {
+ return nil
+ }
+ return r
+}
+
+type Lists [][]int
+
+func (l Lists) Keep(f func([]int) bool) Lists {
+ r := Lists{}
+ for _, v := range l {
+ if f(v) {
+ r = append(r, v)
+ }
+ }
+ if len(r) == 0 {
+ return nil
+ }
+ return r
+}
+
+type Strings []string
+
+func (s Strings) Keep(f func(string) bool) Strings {
+ r := Strings{}
+ for _, v := range s {
+ if f(v) {
+ r = append(r, v)
+ }
+ }
+ if len(r) == 0 {
+ return nil
+ }
+ return r
+}