diff options
author | Hans Raaf <hara@oderwat.de> | 2015-02-28 18:04:36 +0100 |
---|---|---|
committer | Hans Raaf <hara@oderwat.de> | 2015-03-06 18:16:00 +0100 |
commit | 534fe46b8264cb8db71a254f0c6b62b1e50dfb1e (patch) | |
tree | 1f8f7f8836807aa3ff73f29a73a4cb4bb8d44513 /lib/pure/collections/sequtils.nim | |
parent | 2c0dfcb302b20674da7a6be1752c4b3db6ffb60d (diff) | |
download | Nim-534fe46b8264cb8db71a254f0c6b62b1e50dfb1e.tar.gz |
Added repeat(seq, n) to sequtils.
This adds a repeat proc for sequences. There is also an test for it at the end of file.
Diffstat (limited to 'lib/pure/collections/sequtils.nim')
-rw-r--r-- | lib/pure/collections/sequtils.nim | 28 |
1 files changed, 28 insertions, 0 deletions
diff --git a/lib/pure/collections/sequtils.nim b/lib/pure/collections/sequtils.nim index e690e8eba..38499aa4f 100644 --- a/lib/pure/collections/sequtils.nim +++ b/lib/pure/collections/sequtils.nim @@ -47,6 +47,24 @@ proc concat*[T](seqs: varargs[seq[T]]): seq[T] = result[i] = itm inc(i) +proc repeat*[T](s: seq[T], n: Natural): seq[T] = + ## Returns a new sequence with the items of `s` repeated `n` times. + ## + ## Example: + ## + ## .. code-block: + ## + ## let + ## s = @[1, 2, 3] + ## total = s.repeat(3) + ## assert total == @[1, 2, 3, 1, 2, 3, 1, 2, 3] + result = newSeq[T](n * s.len) + var o = 0 + for x in 1..n: + for e in s: + result[o] = e + inc o + proc deduplicate*[T](seq1: seq[T]): seq[T] = ## Returns a new sequence without duplicates. ## @@ -587,4 +605,14 @@ when isMainModule: seq2D[0][1] = true doAssert seq2D == @[@[true, true], @[true, false], @[false, false], @[false, false]] + block: # repeat tests + let + a = @[1, 2, 3] + b: seq[int] = @[] + + doAssert a.repeat(3) == @[1, 2, 3, 1, 2, 3, 1, 2, 3] + doAssert a.repeat(0) == @[] + #doAssert a.repeat(-1) == @[] # will not compile! + doAssert b.repeat(3) == @[] + echo "Finished doc tests" |