Nim枚举像Python这样的函数

Peh*_*eje 5 enumerate nim-lang

学习Nim,我喜欢它类似于Python(但速度很快).在Python中我可以这样做:

item_index = [(idx, itm) for idx, itm in enumerate(row)]
Run Code Online (Sandbox Code Playgroud)

我正在寻找一种枚举 Nim序列的方法,所以我会这样写:

item_index = lc[(idx, itm) | (idx, itm <- enumerate(row))]
Run Code Online (Sandbox Code Playgroud)

这个功能是否存在?我敢肯定你可以创建它,也许有一个proc,模板或宏它但我仍然很新,这些似乎很难创造我自己.这是我的尝试:

iterator enumerate[T](s: seq[T]): (int, T) =
    var i = 0
    while i < len(s):
        yield (i, s[i])
        i += 1
Run Code Online (Sandbox Code Playgroud)

aMi*_*ike 8

我是nim的新手,我不确定你想要什么,但是...如果你在一个for语句中使用两个变量,你将获得索引和值:

for x, y in [11,22,33]:
  echo x, " ", y
Run Code Online (Sandbox Code Playgroud)

得到:

0 11
1 22
2 33
Run Code Online (Sandbox Code Playgroud)

HTH.

  • 一些背景为什么会这样:当Nim看到一个带有两个循环变量的for循环时,它会尝试在给定的表达式上调用`pairs`.`pairs`运算符是在[system.nim](https://nim-lang.org/docs/system.html#pairs.i,openArray [T])中为`openarray`定义的,它确实[确实]( https://github.com/nim-lang/Nim/blob/9ca56863982fd623739e36adbc1455a2d5c5c8e7/lib/system.nim#L2142)`enumerate`的作用. (7认同)
  • 请注意,这并不适用于所有可迭代对象。例如,如果您尝试使用“start .. end”或“countup(start, end, step)”来执行此操作,您将收到“变量数量错误”错误。 (2认同)