2010-08-07 6 views
168

Java에서 Java의 요소에 대한 현재 인덱스는 어떻게 얻습니까?Java, "for each"루프에서 현재 인덱스/키를 얻는 방법

for (Element song: question){ 
    song.currentIndex();   //<<want the current index. 
} 

PHP에서 당신이 할 수 있습니다 : 자바에서

foreach ($arr as $index => $value) { 
    echo "Key: $index; Value: $value"; 
} 
+5

약 한 달에 한 번 묻습니다. –

+0

PHP에서는 동의어 Java 배열이 아닌 연관 배열을 사용하고 있습니다. – squiguy

답변

238

당신은 당신도, 할 수없는 별도의 인덱스를 유지해야

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

이유는 당신이에 구문 응축 사용할 수있다 루프가 Iterable인데 실제로 값에 "인덱스"가 있는지 보장 할 수 없음

+2

이것은 실제로 의미있는 답입니다. 각 루프는 내용을 반복하면서 (사용 된 반복자가 실제로 수행하는 경우) 업데이트되는 원격 데이터베이스의 스트리밍 데이터를 반복 할 수 있기 때문에 알 수있는 방법이 없습니다. 현재의 인덱스 색인은 데이터의 속성이 아니라 데이터에 대한 *보기 *입니다. – Esko

+1

인덱스가 없을 수도 있지만 루프 내부에서 액세스 할 수있는 일종의 반복 카운터가 있으면 매우 편리합니다. 나는 그런 것들이 핵심 자바에서 거의 끝나지 않을 것이라고 생각한다. 스크립팅 언어 중 일부는 더 많은 기회 일 것이다. – akostadinov

+0

내가 두려웠 던 것처럼, 아마도 Java 12에서는 람다를 사용하고 파일을 한 줄로 읽었을 때 자랑스러워 할 기능으로 추가 할 것입니다. (부인 : 나는 (대부분) 자바 프로그래머이다.) – atas

12

을, 당신은 할 수 없습니다, foreach 문이 반복자를 숨기기 위해 의미되었다한다. 현재 반복을 얻으려면 일반 For 루프를 수행해야합니다. 루프 정상을

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

또는 사용 :

11

인덱스를 추적하십시오. Java에서 수행되는 방법입니다.

int index = 0; 
    for (Element song: question){ 
     // Do whatever 
     index++; 
    } 
+1

그렇습니다.하지만 Java5에서 소개 된 향상된 for-each 루프가 마음에 들었던만큼, 기존의 for-each 구문을 단순히 사용하는 목적을 달성하기 위해 자신의 인덱스를 제공하지 않습니다. Java에 내장 된 것을 사용하면 Java 개발자가 (항상 그런 것은 아니지만)보다 직관적이거나 읽기 쉽습니다. –

+1

7 년 후 ... (와우 나는 그것을 믿을 수 없어, 시간 파리), 나는 당신과 동의 @ 마이클 M 100 %. –

6

자바에서는 불가능합니다. 다른 사람들이 '직접 할 수 없습니다'지적

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

for((el, i) <- m.zipWithIndex) 
    println(el +" "+ i) 
+0

깔끔한! https://stackoverflow.com/questions/7167253/is-there-a-java-equivalent-of-pythons-enumerate-function –

1

으로 :


다음은 스칼라 방법입니다. Song의 색인 키를 원한다고 추측하고 있습니까? 요소에 다른 필드 (멤버 변수)를 만듭니다. 노래를 컬렉션에 추가 할 때 그것을 증가시킵니다.

21
for (Song s: songList){ 
    System.out.println(s + "," + songList.indexOf(s); 
} 

링크드 목록에서 가능합니다.

당신은 노래 클래스에서 toString()을 만들어야합니다. 노래 제목을 인쇄하지 않으면 인쇄됩니다.

아마 지금 당신과 관련이 없습니다.^_^현재 코드에서

+0

을 읽어보십시오. 좋은 생각 –

+9

추악한 해킹 ...... – Pacerier

+40

사람들이 http://stackoverflow.com/a/5200217에 댓글을 달았 기 때문에, 중복 요소가 있고 O (n²)가 느린 경우 이것은 잘못되었습니다. –

-3

예 내가 함께 일하고 있어요 :

int index=-1; 
for (Policy rule : rules) 
{ 
    index++; 
    // do stuff here 
} 

하면 처리하는대로 깔끔하게 제로의 인덱스 및 증가로 시작 할 수 있습니다.

+0

간단히 성가시다. 0에서 시작하여 마지막에 구현하십시오. 루프의 본문에서 continue를 사용하지 않는 한. – gabor

관련 문제