summary refs log tree commit diff stats
diff options
context:
space:
mode:
authorTimothee Cour <timothee.cour2@gmail.com>2020-02-21 08:26:52 -0800
committerGitHub <noreply@github.com>2020-02-21 17:26:52 +0100
commite05aca8734702f0ad4beb0625780d354d7168bc7 (patch)
treeefe375776d6f2ca3fb589ebb2edabd36ec53dbb9
parent1d90d9816b7c2065e333a000bc0208fb6c145f10 (diff)
downloadNim-e05aca8734702f0ad4beb0625780d354d7168bc7.tar.gz
make unzip faster: seq[i]=val can be 7X faster than seq.add(elem) (#13448)
-rw-r--r--lib/pure/collections/sequtils.nim10
1 files changed, 5 insertions, 5 deletions
diff --git a/lib/pure/collections/sequtils.nim b/lib/pure/collections/sequtils.nim
index ac2201377..e32c784c6 100644
--- a/lib/pure/collections/sequtils.nim
+++ b/lib/pure/collections/sequtils.nim
@@ -290,11 +290,11 @@ proc unzip*[S, T](s: openArray[(S, T)]): (seq[S], seq[T]) {.since: (1, 1).} =
       unzipped2 = @['a', 'b', 'c']
     assert zipped.unzip() == (unzipped1, unzipped2)
     assert zip(unzipped1, unzipped2).unzip() == (unzipped1, unzipped2)
-  result[0] = newSeqOfCap[S](s.len)
-  result[1] = newSeqOfCap[T](s.len)
-  for elem in s:
-    result[0].add(elem[0])
-    result[1].add(elem[1])
+  result[0] = newSeq[S](s.len)
+  result[1] = newSeq[T](s.len)
+  for i in 0..<s.len:
+    result[0][i] = s[i][0]
+    result[1][i] = s[i][1]
 
 proc distribute*[T](s: seq[T], num: Positive, spread = true): seq[seq[T]] =
   ## Splits and distributes a sequence `s` into `num` sub-sequences.