Add sortedBy template to sequtils

This commit is contained in:
def 2015-02-20 05:01:29 +01:00
commit d3946aa621

View file

@ -26,6 +26,8 @@
when not defined(nimhygiene): when not defined(nimhygiene):
{.pragma: dirty.} {.pragma: dirty.}
import algorithm
proc concat*[T](seqs: varargs[seq[T]]): seq[T] = proc concat*[T](seqs: varargs[seq[T]]): seq[T] =
## Takes several sequences' items and returns them inside a new sequence. ## Takes several sequences' items and returns them inside a new sequence.
## ##
@ -415,6 +417,19 @@ template mapIt*(varSeq, op: expr) =
let it {.inject.} = varSeq[i] let it {.inject.} = varSeq[i]
varSeq[i] = op varSeq[i] = op
template sortedBy*(seq1, op: expr): expr =
## Convenience template around the ``sorted`` proc to reduce typing.
##
## The template injects the ``it`` variable which you can use directly in an
## expression.
var result {.gensym.} = sorted(seq1, proc(x, y: type(seq1[0])): int =
var it {.inject.} = x
let a = op
it = y
let b = op
result = cmp(a, b))
result
template newSeqWith*(len: int, init: expr): expr = template newSeqWith*(len: int, init: expr): expr =
## creates a new sequence, calling `init` to initialize each value. Example: ## creates a new sequence, calling `init` to initialize each value. Example:
## ##