Nim 枚举函数,如 Python
Posted
技术标签:
【中文标题】Nim 枚举函数,如 Python【英文标题】:Nim enumerate function like Python 【发布时间】:2018-06-15 16:29:06 【问题描述】:Learning Nim 我喜欢它与 Python 的相似性(但速度很快)。在 Python 中我可以这样做:
item_index = [(idx, itm) for idx, itm in enumerate(row)]
我正在寻找一种方法来枚举一个 Nim 序列,所以我会这样写:
item_index = lc[(idx, itm) | (idx, itm <- enumerate(row))]
这个功能存在吗?我相信你可以创建它,也许可以使用 proc、模板或宏来创建它,但我仍然很新,而且这些似乎仍然很难自己创建。这是我的尝试:
iterator enumerate[T](s: seq[T]): (int, T) =
var i = 0
while i < len(s):
yield (i, s[i])
i += 1
【问题讨论】:
【参考方案1】:我是 nim 的新手,我不确定你想要什么,但是...
如果您在for
语句中使用两个变量,您将获得索引和值:
for x, y in [11,22,33]:
echo x, " ", y
给予:
0 11
1 22
2 33
HTH。
【讨论】:
这个工作原理的一些背景知识:当 Nim 看到一个带有两个循环变量的 for 循环时,它会尝试在给定的表达式上调用pairs
。 pairs
运算符是在 system.nim 中为 openarray
定义的,它对 exactly 的作用与 enumerate
的作用相同。
请注意,这不适用于所有可迭代对象。例如,如果您尝试使用start .. end
或countup(start, end, step)
执行此操作,您将收到wrong number of variables
错误。
@ArthurKhazbs 你为什么要这样做?,OP 正在尝试迭代一个数组。以上是关于Nim 枚举函数,如 Python的主要内容,如果未能解决你的问题,请参考以下文章