在行迭代器上使用对
Using pairs on the lines iterator
有没有更优雅的方法来做到这一点?我想用for iLine, line in lines inputFile
,所以加糖为pairs
。但是,这似乎不适用于 lines
迭代器。我做错了什么,还是这根本不可能?
var iLine = 0
for line in lines inputFile:
for iCell, cell in line:
var val = false
if cell == '#':
val = true
row[iCell] = val
map[iLine] = row
iLine += 1
我可能只为 File
定义 pairs
,这样你就可以写
iterator pairs(f: File): (int, string) =
var idx = 0
for line in lines(f):
yield (idx, line)
inc idx
for idx, line in open("/tmp/a.nim"):
echo idx
它可能有点模棱两可 - 例如lines
一个清楚地表明您正在迭代索引行。第二种选择是 return (int, string)
来自迭代器:
iterator idxLines(f: string): (int, string) =
var idx = 0
for line in lines(open(f)):
yield (idx, line)
inc idx
for idx, line in idxLines("/tmp/a.nim"):
echo idx
您可以像这样使用 enumerate
迭代器:
import std / enumerate
for lnum, line in enumerate(lines inputFile):
# Do your thing here.
此迭代器是在 Nim v1.4.0 中引入的,因此请确保您的版本是最新的。
有没有更优雅的方法来做到这一点?我想用for iLine, line in lines inputFile
,所以加糖为pairs
。但是,这似乎不适用于 lines
迭代器。我做错了什么,还是这根本不可能?
var iLine = 0
for line in lines inputFile:
for iCell, cell in line:
var val = false
if cell == '#':
val = true
row[iCell] = val
map[iLine] = row
iLine += 1
我可能只为 File
定义 pairs
,这样你就可以写
iterator pairs(f: File): (int, string) =
var idx = 0
for line in lines(f):
yield (idx, line)
inc idx
for idx, line in open("/tmp/a.nim"):
echo idx
它可能有点模棱两可 - 例如lines
一个清楚地表明您正在迭代索引行。第二种选择是 return (int, string)
来自迭代器:
iterator idxLines(f: string): (int, string) =
var idx = 0
for line in lines(open(f)):
yield (idx, line)
inc idx
for idx, line in idxLines("/tmp/a.nim"):
echo idx
您可以像这样使用 enumerate
迭代器:
import std / enumerate
for lnum, line in enumerate(lines inputFile):
# Do your thing here.
此迭代器是在 Nim v1.4.0 中引入的,因此请确保您的版本是最新的。