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:如何将整数转换为等效的枚举字符串? [复制]