是否有一个Scala等效的python枚举?

时间:2011-06-26 20:16:31

标签: scala enumerate

我想要

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

在Scala中执行以下操作

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

2 个答案:

答案 0 :(得分:43)

您可以使用Iterable trait中的zipWithIndex

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

答案 1 :(得分:0)

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

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

由于zipWithIndex从现有序列中创建了一个新序列,因此您可能需要在调用view之前先调用collection.view.zipWithIndex

此外,Python enumerate具有一个可选参数来设置索引的起始值。在scala中,以下将起始值设置为1:

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