2015-04-16 44 views
4

我想直接從切片中指定一個序列(而不是遍歷切片並將每個元素單獨添加到序列中)。我嘗試了幾種不同的方法,但明顯的方法似乎不起作用。如何將切片轉換爲序列?

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] 

導入列表解析在文檔中我找不到任何辦法,這是可以做到的是不涉及從未來導入實驗內容或者自己重載序列構造函數。

回答

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)