This project makes an effort to add functional algorithms that are available in most modern languages (JS, C#, C++) and native in functional languages, but are generally not available in Delphi yet. Spring4d adds a lot of this functionality for IEnumerable, but are still not available for builtin Delphi types like TList.
Underscore4d adds functions in the style of UnderscoreJS, using the _ namespace and passing both list/enumerable and the (anonymous) function to perform.
(Be aware that there's a performance penalty when using this library, as the supplied anonymous functions will not be inlined into the algorithm.)
| UnderscoreJS | Spring4d | Delphi | Underscore4d |
|---|---|---|---|
| each | ForEach | x | |
| map T | x | x | Map |
| map T,S | OfType? | x | Map |
| reduce T | Aggregate T | x | Reduce |
| reduce T,S | x | x | Reduce |
| reduceRight | x | x | |
| find | First | x | Find* |
| find noexcept | FirstOrDefault | x | FindOrDefault |
| filter | Where | x | Filter |
| where | |||
| findWhere | |||
| reject | |||
| every | All | x | Every |
| some | Any | ||
| contains | Contains | Contains | x |
| pluck | |||
| max T | Max* | ||
| min T | Min* | ||
| sortBy | |||
| groupBy | |||
| indexBy | |||
| countBy | |||
| shuffle | |||
| sample | |||
| toArray | |||
| size | |||
| partition | |||
| first | [0] | First | |
| initial | |||
| last | Last | ||
| rest | |||
| compact | |||
| flatten | |||
| without | |||
| union | Union | x | Union |
| intersection | IntersectWith | x | Intersection |
| difference | x | Difference | |
| uniq | Uniq | ||
| zip | x | Zip | |
| unzip | |||
| object | |||
| chunk | |||
| indexOf | |||
| lastIndexOf | |||
| sortedIndex | |||
| findIndex | |||
| findLastIndex | |||
| range |
*) will throw exception on failure
- Join