feature/count (#13837)
This commit is contained in:
parent
d01245e501
commit
df8e0e7f0c
2 changed files with 20 additions and 1 deletions
|
|
@ -124,9 +124,9 @@ echo f
|
||||||
through an SSL-wrapped `Socket`/`AsyncSocket`.
|
through an SSL-wrapped `Socket`/`AsyncSocket`.
|
||||||
- Added `distinctBase` overload for values: `assert 12.MyInt.distinctBase == 12`
|
- Added `distinctBase` overload for values: `assert 12.MyInt.distinctBase == 12`
|
||||||
- Added `browsers.openDefaultBrowser` without URL, implements IETF RFC-6694 Section-3.
|
- Added `browsers.openDefaultBrowser` without URL, implements IETF RFC-6694 Section-3.
|
||||||
|
- Added `sequtils.countIt`, allowing for counting items using a predicate.
|
||||||
- Added `jsconsole.trace`, `jsconsole.table`, `jsconsole.exception` for JavaScript target.
|
- Added `jsconsole.trace`, `jsconsole.table`, `jsconsole.exception` for JavaScript target.
|
||||||
|
|
||||||
|
|
||||||
## Library changes
|
## Library changes
|
||||||
|
|
||||||
- `asyncdispatch.drain` now properly takes into account `selector.hasPendingOperations`
|
- `asyncdispatch.drain` now properly takes into account `selector.hasPendingOperations`
|
||||||
|
|
|
||||||
|
|
@ -600,6 +600,25 @@ template keepItIf*(varSeq: seq, pred: untyped) =
|
||||||
inc(pos)
|
inc(pos)
|
||||||
setLen(varSeq, pos)
|
setLen(varSeq, pos)
|
||||||
|
|
||||||
|
since (1, 1):
|
||||||
|
template countIt*(s, pred: untyped): Natural =
|
||||||
|
## Returns a count of all the items that fulfilled the predicate.
|
||||||
|
##
|
||||||
|
## The predicate needs to be an expression using
|
||||||
|
## the ``it`` variable for testing, like: ``countIt(@[1, 2, 3], it > 2)``.
|
||||||
|
##
|
||||||
|
runnableExamples:
|
||||||
|
let numbers = @[-3, -2, -1, 0, 1, 2, 3, 4, 5, 6]
|
||||||
|
iterator iota(n: int): int =
|
||||||
|
for i in 0..<n: yield i
|
||||||
|
assert numbers.countIt(it < 0) == 3
|
||||||
|
assert countIt(iota(10), it < 2) == 2
|
||||||
|
|
||||||
|
var result = 0
|
||||||
|
for it {.inject.} in s:
|
||||||
|
if pred: result += 1
|
||||||
|
result
|
||||||
|
|
||||||
proc all*[T](s: openArray[T], pred: proc(x: T): bool {.closure.}): bool =
|
proc all*[T](s: openArray[T], pred: proc(x: T): bool {.closure.}): bool =
|
||||||
## Iterates through a container and checks if every item fulfills the
|
## Iterates through a container and checks if every item fulfills the
|
||||||
## predicate.
|
## predicate.
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue