我是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
Run Code Online (Sandbox Code Playgroud)
我试过的其他方法似乎更接近......
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
Run Code Online (Sandbox Code Playgroud)
......但现在我正打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
Run Code Online (Sandbox Code Playgroud)
...我究竟做错了什么?
如果您不想调整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
Run Code Online (Sandbox Code Playgroud)
成功!
事实证明,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
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
726 次 |
| 最近记录: |