diff --git a/README.md b/README.md index 4354a135..27da60b4 100644 --- a/README.md +++ b/README.md @@ -395,7 +395,7 @@ These examples incubate dotSCAD and dotSCAD refactors these examples. See [examp [**util/sorted**(lt[, cmp, key, reverse])](https://openhome.cc/eGossip/OpenSCAD/lib3x-sorted.html) | sort a list. [**util/contains**(lt, elem)](https://openhome.cc/eGossip/OpenSCAD/lib3x-contains.html) | return `true` if `lt` contains `elem`. [**util/binary_search**(sorted, target[, lo, hi])](https://openhome.cc/eGossip/OpenSCAD/lib3x-binary_search.html) | search a value in a sorted list. - +[**util/count**(lt, test)](https://openhome.cc/eGossip/OpenSCAD/lib3x-count.html) | return the number of times `test` return `true` in the list. ## Maze diff --git a/docs/lib3x-count.md b/docs/lib3x-count.md new file mode 100644 index 00000000..8c369724 --- /dev/null +++ b/docs/lib3x-count.md @@ -0,0 +1,15 @@ +# count + +Returns the number of times `test` return `true` in the list. + +**Since:** 3.3 + +## Parameters + +- `lt` : The list. +- `test` : A testing function. + +## Examples + + points = [[7, 2, 2], [1, 1, 2], [3, 4, 2], [3, 4, 2], [1, 2, 3]]; + assert(count(points, function(p) norm(p) > 5) == 3); \ No newline at end of file diff --git a/src/util/count.scad b/src/util/count.scad index 636fa7db..f74f0e3d 100644 --- a/src/util/count.scad +++ b/src/util/count.scad @@ -1 +1,11 @@ +/** +* count.scad +* +* @copyright Justin Lin, 2022 +* @license https://opensource.org/licenses/lgpl-3.0.html +* +* @see https://openhome.cc/eGossip/OpenSCAD/lib3x-count.html +* +**/ + function count(lt, test) = len([for(elem = lt) if(test(elem)) undef]); \ No newline at end of file