Java,如何在"for each"循环中获取当前索引/键

dro*_*ren 231 java

在Java中,如何获取Java中元素的当前索引?

for (Element song: question){
    song.currentIndex();         //<<want the current index.
}
Run Code Online (Sandbox Code Playgroud)

在PHP中你可以这样做:

foreach ($arr as $index => $value) {
    echo "Key: $index; Value: $value";
}
Run Code Online (Sandbox Code Playgroud)

Mic*_*zek 318

您不能,您需要单独保留索引:

int index = 0;
for(Element song : question) {
    System.out.println("Current index is: " + (index++));
}
Run Code Online (Sandbox Code Playgroud)

或使用正常for循环:

for(int i = 0; i < question.length; i++) {
    System.out.println("Current index is: " + i);
}
Run Code Online (Sandbox Code Playgroud)

原因是您可以使用精简语法循环遍历任何Iterable,并且不能保证值实际上具有"索引"

  • 这确实是语义上的正确答案,因为每个循环都可以迭代来自远程数据库的流数据,而远程数据库在您迭代其内容时被更新(如果使用的迭代器实际上这样做),在这种情况下无法知道目前的指数.索引只是数据的*视图*,而不是数据的属性. (3认同)
  • 尽管它可能没有索引,但拥有某种可以在循环内部访问的迭代计数器会非常方便。我想这样的事情在核心java中很难结束,对于一些脚本语言来说机会更多。 (3认同)

小智 15

for (Song s: songList){
    System.out.println(s + "," + songList.indexOf(s); 
}
Run Code Online (Sandbox Code Playgroud)

它可以在链表中.

你必须在歌曲类中制作toString().如果你不这样做,它将打印出歌曲的参考.

现在可能和你无关.^ _ ^

  • 正如人们在http://stackoverflow.com/a/5200217上发表评论的那样,如果有重复的元素并且O(n²)很慢,那就错了. (73认同)
  • 可怕,可怕,可怕.请不要*做*. (27认同)
  • 丑陋的黑客...... (26认同)
  • 错误的解决方案indexOf返回第一个match元素的索引,因此,如果有多个索引,即使循环在第二个中,也将返回第一个match的索引。 (3认同)
  • 请勿将其视为解决方案,请尽可能删除答案, (2认同)

The*_*eLQ 14

在Java中,你不能,因为foreach意味着隐藏迭代器.您必须执行正常的For循环才能获得当前迭代.


Sah*_*wal 11

跟踪您的索引:这是在Java中完成的:

 int index = 0;
    for (Element song: question){
        // Do whatever
         index++;
    }
Run Code Online (Sandbox Code Playgroud)

  • 7年后...(哇,我不敢相信,时光飞逝),我同意你@MichaelM 100%。 (4认同)
  • 是的,但是,尽管我喜欢Java5中引入的增强的for-each循环,但提供自己的索引不会破坏仅使用传统的for-each构造的目的吗?对于Java开发人员来说,使用Java内置的功能通常会更直观/可读(尽管不总是如此)。 (2认同)

小智 5

在Java中不可能.


这是Scala方式:

val m = List(5, 4, 2, 89)

for((el, i) <- m.zipWithIndex)
  println(el +" "+ i)
Run Code Online (Sandbox Code Playgroud)