summary refs log tree commit diff stats
diff options
context:
space:
mode:
authorAndreas Rumpf <rumpf_a@web.de>2014-08-12 20:00:25 +0200
committerAndreas Rumpf <rumpf_a@web.de>2014-08-12 20:00:25 +0200
commitb1bfd51200fd676168b518e70187295546981471 (patch)
tree336634d492c1b2c3a6b1d5039272a1c9b585ab98
parent15eea198bee887e2412543f635c74f528cbf21d8 (diff)
parent61a6ecfd94140f8f6546eb008ccf1bfd5422e2ef (diff)
downloadNim-b1bfd51200fd676168b518e70187295546981471.tar.gz
Merge pull request #1403 from def-/newseqwith
Add newSeqWith
-rw-r--r--lib/pure/collections/sequtils.nim24
1 files changed, 24 insertions, 0 deletions
diff --git a/lib/pure/collections/sequtils.nim b/lib/pure/collections/sequtils.nim
index c50c4165b..2629e9f40 100644
--- a/lib/pure/collections/sequtils.nim
+++ b/lib/pure/collections/sequtils.nim
@@ -409,6 +409,23 @@ template mapIt*(varSeq, pred: expr) =
     let it {.inject.} = varSeq[i]
     varSeq[i] = pred
 
+template newSeqWith*(len: int, init: expr): expr =
+  ## creates a new sequence, calling `init` to initialize each value. Example:
+  ##
+  ## .. code-block:: nimrod
+  ##   var seq2D = newSeqWith(20, newSeq[bool](10))
+  ##   seq2D[0][0] = true
+  ##   seq2D[1][0] = true
+  ##   seq2D[0][1] = true
+  ##
+  ##   import math
+  ##   var seqRand = newSeqWith(20, random(10))
+  ##   echo seqRand
+  var result {.gensym.} = newSeq[type(init)](len)
+  for i in 0 .. <len:
+    result[i] = init
+  result
+
 when isMainModule:
   import strutils
   block: # concat test
@@ -557,4 +574,11 @@ when isMainModule:
     doAssert b.distribute(5, true)[4].len == 5
     doAssert b.distribute(5, false)[4].len == 2
 
+  block: # newSeqWith tests
+    var seq2D = newSeqWith(4, newSeq[bool](2))
+    seq2D[0][0] = true
+    seq2D[1][0] = true
+    seq2D[0][1] = true
+    doAssert seq2D == @[@[true, true], @[true, false], @[false, false], @[false, false]]
+
   echo "Finished doc tests"