Code coverage: 100%
Check the methods ported from C# IEnumerable[T] here in the enumerable interface definition
If you are new to IEnumerable, you can [explore & read examples by Microsoft](ported from C#).
got := goe.NewIEnumerable[string]("Hello", "World"). Where(func(v string) bool { return len(v) < 3 }). OrderDescending().GetOrderedEnumerable(). Reverse(). FirstOrDefault(nil, goe.Ptr("Oops")) fmt.Println(got) // "Oops"array := []byte{0, 70, 99, 106, 106, 109, 30, 85, 109, 112, 106, 98, 99, 66, 88, 69} got := goe.NewIEnumerable[byte](array...). Skip(1). Take(11). Select(transform). CastInt32(). Append('"'). AggregateAnySeed("\"", aggregate) fmt.Println(got) // "Hello World"Due to limitation of Go that does not allow generic type in struct method, the following methods are defined in goe_helper package as utility methods, instead of attaching directly into the IEnumerable instance:
- Chunk
- GroupBy
- GroupJoin
- Join
- OfType
- Zip
Example: ❌ instance.Chunk(size:2) | ✅ goe_helper.Chunk(instance, size:2)
The following methods are implemented IEnumerable instance but also implemented in goe_helper package, since methods in helper package is more likely C# method signature.
- Select
- SelectMany
- Aggregate
- Empty
- Repeat
Some IEnumerable[T] methods like Order, Distinct, Except, Union, Intersect,... need value comparator to compare between each element in the sequence and the IComparer[T] is needed.
This is definition of IComparer[T] in comparers package:
// IComparer use methods Compare* to compare value of 2 input values. // // If left is less than right, returns -1. // // If left is equals to right, returns 0. // // If left is greater than right, returns 1. type IComparer[T any] interface { // CompareTyped compares value from params. // // If x is less than y, returns -1. // // If x is equals to y, returns 0.s // // If x is greater than y, returns 1. CompareTyped(x, y T) int // CompareAny accept any params. // // If both x and y are nil, return 0. // // If x is nil and y is not nil, return -1. // // If x is not nil and y is nil, return 1. // // The rest, implement in your own way, since type any means you can pass everything here, // and you should handle them carefully CompareAny(x, y any) int }See implementation sample in example.
go-ienumerable will attempts to resolve a default comparer using predefined comparers for some type. You can register a comparer for YourType by implement your own IComparer[YourType]. See sample of implement and default comparer registration for custom types and other types in example.
Predefined IComparer[T]: string, bool, numeric (int, int8/16/32/64, uint, uint8/16/32/64, float32/64, complex64/128), *big.Int, *big.Float, time.Time with corresponding initialized comparer instance, eg: compares.StringComparer is a string comparer, compares.NumericComparer is comparer of numeric and so on.