我想直接从切片指定一个序列(而不是遍历切片并将每个元素分别添加到序列中).我尝试了几种不同的方法,但显而易见的方法似乎没有用.
var
x = newSeq(1..n)
y: seq[int] = @[1..n]
z: seq[int] = 1..n
Run Code Online (Sandbox Code Playgroud)
我唯一能够开始工作的是从中导入列表推导 future
var x: seq[int] = lc[x | (x <- 1..n), int]
Run Code Online (Sandbox Code Playgroud)
我在文档中找不到任何方法可以做到这一点,不涉及从未来导入实验性的东西或自己重载序列构造函数.
https://nim-lang.org/docs/sequtils.html#toSeq.t,untyped
import sequtils
var x = toSeq 1..n
Run Code Online (Sandbox Code Playgroud)
作为参考,您也可以编写自己的实现来将切片转换为seq:
proc toSeq2[T](s: Slice[T]): seq[T] =
result = @[]
for x in s.a .. s.b:
result.add x
Run Code Online (Sandbox Code Playgroud)
小智 5
这对于大切片来说将具有良好的性能,因为不会进行内存重新分配:
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)
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
571 次 |
| 最近记录: |