我想直接从切片指定一个序列(而不是遍历切片并将每个元素分别添加到序列中)。我尝试了几种不同的方法,但显而易见的方法似乎不起作用。
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]
我在文档中找不到任何方法可以做到这一点,不涉及从未来导入实验性的东西或自己重载序列构造函数。
答案 0 :(得分:5)
https://nim-lang.org/docs/sequtils.html#toSeq.t,untyped
import sequtils
var x = toSeq 1..n
作为参考,您也可以编写自己的实现来将切片转换为seq:
proc toSeq2[T](s: Slice[T]): seq[T] =
result = @[]
for x in s.a .. s.b:
result.add x
答案 1 :(得分:3)
这对于大切片具有良好的性能,因为不会有内存重新分配:
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)