문제

다음과 같은 루프가있는 경우

For Each s As String In stringList
    ..do stuff..
Next

일종의 (숨겨진) 반복자가 있습니까? 아니면 카운트를 유지하기 위해 외부 정수를 추가해야합니까?

Dim i As Integer
For Each s As String In stringList
    ..do stuff..
    i += 1
Next
도움이 되었습니까?

해결책

숨겨진 반복기가 없으므로 두 번째 예제에서 코드를 사용하거나 정규로 되돌아 가야합니다. for 고리.

다른 팁

Foreach는 다른 카운터가 필요하지 않습니다. 목록의 각 문자열을 통해 반복됩니다 (예에서 StringList가 표시되는 것입니다 :)). 목록의 각 문자열에 무언가를 중지하려는 이유가 없다면 (즉, 처음 3 줄 만 처리). 그것이 당신의 foreach 루프 안에 카운터를 갖는 유일한 이유 일 것입니다. 난 그냥 OP를 다시 읽습니다. 다른 이유는 당신이 얼마나 많은 문자열을 처리했는지 아는 것입니다.

도움이 되었기를 바랍니다! 거기에

숨겨진 반복자가 없습니다.

변수 i 당신의 예에서는 중복됩니다.

추신 : 만약 당신이 하다 필요 i 무언가를 추적하기 위해, 나는 그것에 의존하기 전에 초기화 할 것입니다.

foreach 루프는 카운트를 추적하는 열거자를 사용하여 구현됩니다. 당신이 얼마나 많은 루프를 겪었는지 알고 싶다면 루프를 사용하거나 카운트를 추적해야합니다.

for-each loop은 당신을 위해 열거자를 추적합니다.

ForEach s As String In new string[] {"one","two","three"}
    Console.WriteLine(s);
Next

(VB와 C#의 놈화에 대해 죄송합니다. 저는 곱슬 괄호 종류의 사람입니다. 아마도 그것을 의사 코드로 생각하는 것이 가장 좋습니다)

위의 코드는 출력됩니다

하나

컴파일하는 경우. :)

당신은 확실히 자신의 외부 정수를 제공 할 필요가 없습니다.

그럼에도 불구하고 숨겨진 것은 없습니다 카운터. 숨겨진 곳이 있습니다 열거 자. 차이점은 반복 할 수있는 모든 것이 색인에 의해 액세스 할 수 없다는 것입니다. 때로는 이전 항목을 계산할 때까지 다음 항목을 순서로 얻을 수 없습니다. 따라서 열거자는 현재 위치를 추적하고 카운터를 사용하지 않고 루프의 각 반복에 대해 다음 항목을 반환하는 상태 머신을 사용할 수 있습니다.

"각각"의 마법의 일부는 루프 인쇄기를 직접 추적 할 필요가 없다는 것입니다. 당신을 위해 끝났습니다. 문서를 읽을 수 있습니다. 인터페이스 "ienumerable"을 참조하고 그것이 사실 인 "getEnumerator ()"를 구현해야한다고 말할 수 있습니다. getEnumerator () 함수는이 마법을 제공합니다.

나는 그것이 옳다고 생각합니다. 다른 경우 누군가가 나를 교정 할 것이라고 확신합니다.

우아한 코드보기에서 열거기를 .first () 및 .last () 메소드와 함께 사용할 수있는 경우 좋을 것입니다.

Django 버전 1.0.2 Final ...

열거 :

{% for item in items %}
    <li>{{ forloop.counter }}) {{ item }}</li>
{% endfor %}

루프의 첫 번째 항목에 '규칙'을 적용하려면 이것을 시도해보십시오.

    {% if forloop.first %}Starting the loop{% endif %}

마지막 항목을 제외하려면 이것을 시도하십시오.

    {% if not forloop.last %}, {% endif %}

... 마지막 예제는 쉼표로 분리 된 목록에 적합합니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top