如何将切片转换为序列?

How To Convert Slice To Sequence?

我想直接从切片指定序列(而不是遍历切片并将每个元素单独添加到序列中)。我尝试了几种不同的方法,但明显的方法似乎不起作用。

var 
    x = newSeq(1..n)
    y: seq[int] = @[1..n]
    z: seq[int] = 1..n

我唯一设法开始工作的是从 future

导入列表理解
var x: seq[int] = lc[x | (x <- 1..n), int]

我在文档中找不到任何不涉及从未来导入实验性内容或自己重载序列构造函数的方法。

https://nim-lang.org/docs/sequtils.html#toSeq.t,untyped

import sequtils
var x = toSeq 1..n

作为参考,您也可以编写自己的实现来将切片转换为序列:

proc toSeq2[T](s: Slice[T]): seq[T] =
  result = @[]
  for x in s.a .. s.b:
    result.add x

这对于大型切片会有很好的性能,因为不会重新分配内存:

proc sliceToSeq[T](s: Slice[T]): seq[T] =
  result = newSeq[T](ord(s.b) - ord(s.a) + 1)
  var i = 0
  for x in s.a .. s.b:
    result[i] = x
    inc(i)