summaryrefslogtreecommitdiff
path: root/go/strain/strain.go
blob: 487b190de6b3abe99a0d0cc10a45cba70552c430 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
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
}