python枚举是不是有等效的Scala?

Posted

技术标签:

【中文标题】python枚举是不是有等效的Scala?【英文标题】:Is there a Scala equivalent for the python enumerate?python枚举是否有等效的Scala? 【发布时间】:2011-09-23 02:36:24 【问题描述】:

我想要方便

for i, line in enumerate(open(sys.argv[1])):
  print i, line

在 Scala 中执行以下操作时

for (line <- Source.fromFile(args(0)).getLines()) 
  println(line)

【问题讨论】:

【参考方案1】:

您可以使用 Iterable 特征中的 zipWithIndex

for ((line, i) <- Source.fromFile(args(0)).getLines().zipWithIndex) 
   println(i, line)

【讨论】:

谢谢,但我认为它:for ((line, i) 我不知道 Python 是做什么的,但这从第一行的索引 0 而不是索引 1 开始。 Python 也是如此。这是序列索引的标准。方法是zipWithIndex,不是zipWithLineNumber【参考方案2】:

正如其他人已经回答的那样,如果您希望索引从0开始,您可以使用zipWithIndex

for ((elem, i) <- collection.zipWithIndex) 
    println(i, elem)

因为如果在集合本身上调用 zipWithIndex 会创建集合的副本,您可能希望将其调用到集合的 view 而不是:collection.view.zipWithIndex

不过,Python 的enumerate 有一个可选参数来设置索引的起始值。在 Scala 中,你可以这样做:

for ((elem, i) <- collection.zip(Stream from 1) 
    println(i, elem)

如需更长时间的讨论,请阅读https://alvinalexander.com/scala/how-to-use-zipwithindex-create-for-loop-counters-scala-cookbook。

【讨论】:

以上是关于python枚举是不是有等效的Scala?的主要内容,如果未能解决你的问题,请参考以下文章

Django/Python:如何将整数转换为等效的枚举字符串? [复制]

Django/Python:如何将整数转换为等效的枚举字符串? [复制]

scala 自定义实现枚举

在scala 3中获取枚举的名称?

Scala 枚举: Enumeration 概述

Scala模式匹配Java枚举值