python 枚举有 Scala 等价物吗?

发布于 2024-11-17 17:52:57 字数 227 浏览 2 评论 0原文

能够方便一些

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

我希望在 Scala 中执行以下操作时

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

I'd like the convienience of

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

when doing the following in Scala

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

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

远山浅 2024-11-24 17:52:57

您可以使用 Iterable 特征中的 zipWithIndex :

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

You can use the zipWithIndex from Iterable trait:

for ((line, i) <- Source.fromFile(args(0)).getLines().zipWithIndex) {
   println(i, line)
}
雨落□心尘 2024-11-24 17:52:57

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

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

因为如果在集合本身上调用 zipWithIndex ,则会创建集合的副本,您可能想将其调用到集合的视图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

As already answered by others, if you want your index to start from 0, you can use zipWithIndex:

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

Because zipWithIndex creates a copy of the collection if called on the collection itself, you may want to call it to a view of the colleciton instead: collection.view.zipWithIndex.

Nonetheless, Python's enumerate has an optional parameter to set the start value of your index. In scala, you can do:

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

For a longer discussion, read https://alvinalexander.com/scala/how-to-use-zipwithindex-create-for-loop-counters-scala-cookbook.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文