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 循环时,它会尝试在给定的表达式上调用 pairspairs 运算符是在 system.nim 中为 openarray 定义的,它对 exactly 的作用与 enumerate 的作用相同。 请注意,这不适用于所有可迭代对象。例如,如果您尝试使用start .. endcountup(start, end, step) 执行此操作,您将收到wrong number of variables 错误。 @ArthurKhazbs 你为什么要这样做?,OP 正在尝试迭代一个数组。

以上是关于Nim 枚举函数,如 Python的主要内容,如果未能解决你的问题,请参考以下文章

python之枚举--内置函数-enumerate()

Python enumerate() 函数----枚举

4.3 省选模拟赛 石子游戏 树上博弈

enumerate( )枚举函数说明

delphi中的函数传参如何传枚举参数?

枚举类型内部函数 enumerate