Skip to content

Commit 28e1da9

Browse files
author
Sah, Nandeshwar
committed
Added function - sort in method chain functionality
1 parent d7714f1 commit 28e1da9

23 files changed

+3781
-12
lines changed

README.md

Lines changed: 23 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,7 @@ go install github.com/logic-building/functional-go/gofp
2121
```toml
2222
[[constraint]]
2323
name = "github.com/logic-building/functional-go"
24-
version = "8.13.1"
24+
version = "8.14.0"
2525
```
2626

2727
### Quick Start
@@ -36,7 +36,7 @@ func square(num int) int {
3636
}
3737

3838
```
39-
#### Four variants of function. 1 is given above and 3 are given below
39+
#### Four variants of the function. 1 is given above and 3 are given below
4040
##### MapInt, MapIntPtr, MapIntErr, MapIntPtrErr
4141
### MapIntPtr
4242
```go
@@ -341,6 +341,27 @@ Note:
341341
26. Union : Return a set that is the union of the input sets. Repeated value within list(argument) will be ignored
342342
27. Union<struct>By<Field>
343343
```
344+
345+
### Method chain functionality for Basic type as well as struct -
346+
#### Map, Filter, Sort, Distinct, Reverse, DropWhile, Remove
347+
#### Examples
348+
```go
349+
// Use MakeIntSlicePtr for pointer version
350+
r := fp.MakeIntSlice([]int{3, 2, 1}...).
351+
Filter(odd).
352+
Map(square).
353+
Sort()
354+
fmt.Println(r) // [1 9]
355+
356+
func odd (num int) bool {
357+
return num % 2 != 0
358+
}
359+
func square(num int) int {
360+
return num * num
361+
}
362+
363+
```
364+
344365
### Contains functions
345366
```
346367
Takes list as argument and returns Distinct list. Returns empty list if 2nd parameter is empty or nil

fp/distinct.go

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -254,3 +254,17 @@ func DistinctStrIgnoreCase(list []string) []string {
254254
}
255255
return newList
256256
}
257+
258+
// DistinctBool removes duplicates.
259+
func DistinctBool(list []bool) []bool {
260+
var newList []bool
261+
s := make(map[bool]struct{}, len(list))
262+
for _, v := range list {
263+
if _, ok := s[v]; ok {
264+
continue
265+
}
266+
s[v] = struct{}{}
267+
newList = append(newList, v)
268+
}
269+
return newList
270+
}

fp/distinct_test.go

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -407,3 +407,16 @@ func TestDistinctStrIgnoreCase(t *testing.T) {
407407
t.Errorf("DistinctStr failed. Expected=%v, actual=%v", expected, distinct)
408408
}
409409
}
410+
411+
func TestDistinctBool(t *testing.T) {
412+
var vt bool = true
413+
414+
newList := DistinctBool([]bool{vt, vt})
415+
if newList[0] != vt {
416+
t.Errorf("DistinctBool failed")
417+
}
418+
419+
if len(DistinctBool(nil)) > 0 {
420+
t.Errorf("DistinctBool failed.")
421+
}
422+
}

fp/methodchain.go

Lines changed: 140 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -150,6 +150,16 @@ func (slice intSlicePtr) ReversePtr() intSlicePtr {
150150
return ReverseIntsPtr(slice)
151151
}
152152

153+
// Distinct - removes duplicates
154+
func (slice intSlice) Distinct() intSlice {
155+
return DistinctInt(slice)
156+
}
157+
158+
// DistinctPtr - removes duplicates
159+
func (slice intSlicePtr) DistinctPtr() intSlicePtr {
160+
return DistinctIntPtr(slice)
161+
}
162+
153163
type int64Slice []int64
154164
type int64FunctorForMap func(int64) int64
155165
type int64FunctorForFilter func(int64) bool
@@ -300,6 +310,16 @@ func (slice int64SlicePtr) ReversePtr() int64SlicePtr {
300310
return ReverseInts64Ptr(slice)
301311
}
302312

313+
// Distinct - removes duplicates
314+
func (slice int64Slice) Distinct() int64Slice {
315+
return DistinctInt64(slice)
316+
}
317+
318+
// DistinctPtr - removes duplicates
319+
func (slice int64SlicePtr) DistinctPtr() int64SlicePtr {
320+
return DistinctInt64Ptr(slice)
321+
}
322+
303323
type int32Slice []int32
304324
type int32FunctorForMap func(int32) int32
305325
type int32FunctorForFilter func(int32) bool
@@ -450,6 +470,16 @@ func (slice int32SlicePtr) ReversePtr() int32SlicePtr {
450470
return ReverseInts32Ptr(slice)
451471
}
452472

473+
// Distinct - removes duplicates
474+
func (slice int32Slice) Distinct() int32Slice {
475+
return DistinctInt32(slice)
476+
}
477+
478+
// DistinctPtr - removes duplicates
479+
func (slice int32SlicePtr) DistinctPtr() int32SlicePtr {
480+
return DistinctInt32Ptr(slice)
481+
}
482+
453483
type int16Slice []int16
454484
type int16FunctorForMap func(int16) int16
455485
type int16FunctorForFilter func(int16) bool
@@ -600,6 +630,16 @@ func (slice int16SlicePtr) ReversePtr() int16SlicePtr {
600630
return ReverseInts16Ptr(slice)
601631
}
602632

633+
// Distinct - removes duplicates
634+
func (slice int16Slice) Distinct() int16Slice {
635+
return DistinctInt16(slice)
636+
}
637+
638+
// DistinctPtr - removes duplicates
639+
func (slice int16SlicePtr) DistinctPtr() int16SlicePtr {
640+
return DistinctInt16Ptr(slice)
641+
}
642+
603643
type int8Slice []int8
604644
type int8FunctorForMap func(int8) int8
605645
type int8FunctorForFilter func(int8) bool
@@ -750,6 +790,16 @@ func (slice int8SlicePtr) ReversePtr() int8SlicePtr {
750790
return ReverseInts8Ptr(slice)
751791
}
752792

793+
// Distinct - removes duplicates
794+
func (slice int8Slice) Distinct() int8Slice {
795+
return DistinctInt8(slice)
796+
}
797+
798+
// DistinctPtr - removes duplicates
799+
func (slice int8SlicePtr) DistinctPtr() int8SlicePtr {
800+
return DistinctInt8Ptr(slice)
801+
}
802+
753803
type uintSlice []uint
754804
type uintFunctorForMap func(uint) uint
755805
type uintFunctorForFilter func(uint) bool
@@ -900,6 +950,16 @@ func (slice uintSlicePtr) ReversePtr() uintSlicePtr {
900950
return ReverseUintsPtr(slice)
901951
}
902952

953+
// Distinct - removes duplicates
954+
func (slice uintSlice) Distinct() uintSlice {
955+
return DistinctUint(slice)
956+
}
957+
958+
// DistinctPtr - removes duplicates
959+
func (slice uintSlicePtr) DistinctPtr() uintSlicePtr {
960+
return DistinctUintPtr(slice)
961+
}
962+
903963
type uint64Slice []uint64
904964
type uint64FunctorForMap func(uint64) uint64
905965
type uint64FunctorForFilter func(uint64) bool
@@ -1050,6 +1110,16 @@ func (slice uint64SlicePtr) ReversePtr() uint64SlicePtr {
10501110
return ReverseUint64sPtr(slice)
10511111
}
10521112

1113+
// Distinct - removes duplicates
1114+
func (slice uint64Slice) Distinct() uint64Slice {
1115+
return DistinctUint64(slice)
1116+
}
1117+
1118+
// DistinctPtr - removes duplicates
1119+
func (slice uint64SlicePtr) DistinctPtr() uint64SlicePtr {
1120+
return DistinctUint64Ptr(slice)
1121+
}
1122+
10531123
type uint32Slice []uint32
10541124
type uint32FunctorForMap func(uint32) uint32
10551125
type uint32FunctorForFilter func(uint32) bool
@@ -1200,6 +1270,16 @@ func (slice uint32SlicePtr) ReversePtr() uint32SlicePtr {
12001270
return ReverseUints32Ptr(slice)
12011271
}
12021272

1273+
// Distinct - removes duplicates
1274+
func (slice uint32Slice) Distinct() uint32Slice {
1275+
return DistinctUint32(slice)
1276+
}
1277+
1278+
// DistinctPtr - removes duplicates
1279+
func (slice uint32SlicePtr) DistinctPtr() uint32SlicePtr {
1280+
return DistinctUint32Ptr(slice)
1281+
}
1282+
12031283
type uint16Slice []uint16
12041284
type uint16FunctorForMap func(uint16) uint16
12051285
type uint16FunctorForFilter func(uint16) bool
@@ -1350,6 +1430,16 @@ func (slice uint16SlicePtr) ReversePtr() uint16SlicePtr {
13501430
return ReverseUints16Ptr(slice)
13511431
}
13521432

1433+
// Distinct - removes duplicates
1434+
func (slice uint16Slice) Distinct() uint16Slice {
1435+
return DistinctUint16(slice)
1436+
}
1437+
1438+
// DistinctPtr - removes duplicates
1439+
func (slice uint16SlicePtr) DistinctPtr() uint16SlicePtr {
1440+
return DistinctUint16Ptr(slice)
1441+
}
1442+
13531443
type uint8Slice []uint8
13541444
type uint8FunctorForMap func(uint8) uint8
13551445
type uint8FunctorForFilter func(uint8) bool
@@ -1500,6 +1590,16 @@ func (slice uint8SlicePtr) ReversePtr() uint8SlicePtr {
15001590
return ReverseUints8Ptr(slice)
15011591
}
15021592

1593+
// Distinct - removes duplicates
1594+
func (slice uint8Slice) Distinct() uint8Slice {
1595+
return DistinctUint8(slice)
1596+
}
1597+
1598+
// DistinctPtr - removes duplicates
1599+
func (slice uint8SlicePtr) DistinctPtr() uint8SlicePtr {
1600+
return DistinctUint8Ptr(slice)
1601+
}
1602+
15031603
type stringSlice []string
15041604
type stringFunctorForMap func(string) string
15051605
type stringFunctorForFilter func(string) bool
@@ -1650,6 +1750,16 @@ func (slice stringSlicePtr) ReversePtr() stringSlicePtr {
16501750
return ReverseStrsPtr(slice)
16511751
}
16521752

1753+
// Distinct - removes duplicates
1754+
func (slice stringSlice) Distinct() stringSlice {
1755+
return DistinctStr(slice)
1756+
}
1757+
1758+
// DistinctPtr - removes duplicates
1759+
func (slice stringSlicePtr) DistinctPtr() stringSlicePtr {
1760+
return DistinctStrPtr(slice)
1761+
}
1762+
16531763
type boolSlice []bool
16541764
type boolFunctorForMap func(bool) bool
16551765
type boolFunctorForFilter func(bool) bool
@@ -1800,6 +1910,16 @@ func (slice boolSlicePtr) ReversePtr() boolSlicePtr {
18001910
return ReverseBoolsPtr(slice)
18011911
}
18021912

1913+
// Distinct - removes duplicates
1914+
func (slice boolSlice) Distinct() boolSlice {
1915+
return DistinctBool(slice)
1916+
}
1917+
1918+
// DistinctPtr - removes duplicates
1919+
func (slice boolSlicePtr) DistinctPtr() boolSlicePtr {
1920+
return DistinctBoolPtr(slice)
1921+
}
1922+
18031923
type float32Slice []float32
18041924
type float32FunctorForMap func(float32) float32
18051925
type float32FunctorForFilter func(float32) bool
@@ -1950,6 +2070,16 @@ func (slice float32SlicePtr) ReversePtr() float32SlicePtr {
19502070
return ReverseFloat32sPtr(slice)
19512071
}
19522072

2073+
// Distinct - removes duplicates
2074+
func (slice float32Slice) Distinct() float32Slice {
2075+
return DistinctFloat32(slice)
2076+
}
2077+
2078+
// DistinctPtr - removes duplicates
2079+
func (slice float32SlicePtr) DistinctPtr() float32SlicePtr {
2080+
return DistinctFloat32Ptr(slice)
2081+
}
2082+
19532083
type float64Slice []float64
19542084
type float64FunctorForMap func(float64) float64
19552085
type float64FunctorForFilter func(float64) bool
@@ -2099,3 +2229,13 @@ func (slice float64Slice) Reverse() float64Slice {
20992229
func (slice float64SlicePtr) ReversePtr() float64SlicePtr {
21002230
return ReverseFloat64sPtr(slice)
21012231
}
2232+
2233+
// Distinct - removes duplicates
2234+
func (slice float64Slice) Distinct() float64Slice {
2235+
return DistinctFloat64(slice)
2236+
}
2237+
2238+
// DistinctPtr - removes duplicates
2239+
func (slice float64SlicePtr) DistinctPtr() float64SlicePtr {
2240+
return DistinctFloat64Ptr(slice)
2241+
}

0 commit comments

Comments
 (0)