初始化一个seq的seq
Initialize a seq of seqs
我是 Nim 的新手,遇到了一些问题。以下代码生成 SIGSEGV: Illegal storage access. (Attempt to read from nil?)
。我似乎无法弄清楚如何用值填充一系列序列。
const
a = @[ 0, 1, 2, 3, 4, 5]
b = @[10, 11, 12, 13, 14, 15]
var
matrix: seq[seq[int]]
for i, aa in a:
for j, bb in b:
matrix[i][j] = aa+bb
我尝试过的其他方法似乎更接近...
var
matrix = newSeq[seq[int]]()
for i, aa in a:
var row = newSeq[int]()
for j, bb in b:
row[i] = aa+bb
matrix[i] = row
...但现在我正在点击 out of bounds [IndexError]
...
var
matrix = newSeq[seq[int]](5)
for i, aa in a:
var row = newSeq[int](5)
for j, bb in b:
row[i] = aa+bb
matrix[i] = row
...我做错了什么?
成功!
事实证明,Nim 真的不喜欢你在数据尚不存在的地方使用方括号。即matrix[i] = item
会爆炸。但是,matrix.add(item)
会很好用。
以下是我最终在 Nim 中创建二维数组的方式:
var
matrix: seq[seq[int]]
row: seq[int]
matrix = newSeq[seq[int]]()
for i, aa in a:
row = newSeq[int]()
matrix.add(row)
for j, bb in b:
matrix[i].add(aa+bb)
echo matrix
如果您不想调整 seq 的大小,更简单的解决方案是预分配它:
import sequtils
const
a = @[ 0, 1, 2, 3, 4, 5]
b = @[10, 11, 12, 13, 14, 15]
var matrix = newSeqWith(a.len, newSeq[int](b.len))
for i, aa in a:
for j, bb in b:
matrix[i][j] = aa + bb
echo matrix
我是 Nim 的新手,遇到了一些问题。以下代码生成 SIGSEGV: Illegal storage access. (Attempt to read from nil?)
。我似乎无法弄清楚如何用值填充一系列序列。
const
a = @[ 0, 1, 2, 3, 4, 5]
b = @[10, 11, 12, 13, 14, 15]
var
matrix: seq[seq[int]]
for i, aa in a:
for j, bb in b:
matrix[i][j] = aa+bb
我尝试过的其他方法似乎更接近...
var
matrix = newSeq[seq[int]]()
for i, aa in a:
var row = newSeq[int]()
for j, bb in b:
row[i] = aa+bb
matrix[i] = row
...但现在我正在点击 out of bounds [IndexError]
...
var
matrix = newSeq[seq[int]](5)
for i, aa in a:
var row = newSeq[int](5)
for j, bb in b:
row[i] = aa+bb
matrix[i] = row
...我做错了什么?
成功!
事实证明,Nim 真的不喜欢你在数据尚不存在的地方使用方括号。即matrix[i] = item
会爆炸。但是,matrix.add(item)
会很好用。
以下是我最终在 Nim 中创建二维数组的方式:
var
matrix: seq[seq[int]]
row: seq[int]
matrix = newSeq[seq[int]]()
for i, aa in a:
row = newSeq[int]()
matrix.add(row)
for j, bb in b:
matrix[i].add(aa+bb)
echo matrix
如果您不想调整 seq 的大小,更简单的解决方案是预分配它:
import sequtils
const
a = @[ 0, 1, 2, 3, 4, 5]
b = @[10, 11, 12, 13, 14, 15]
var matrix = newSeqWith(a.len, newSeq[int](b.len))
for i, aa in a:
for j, bb in b:
matrix[i][j] = aa + bb
echo matrix