هناك عداد التكرار المخفية في هذه لحلقة؟

StackOverflow https://stackoverflow.com/questions/413171

  •  03-07-2019
  •  | 
  •  

سؤال

إذا كان لديك لحلقة مثل:

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 العادية.

نصائح أخرى

وA foreach لا يتطلب أخرى مضادة. ذلك بالتكرار من خلال كل سلسلة في قائمتك (على افتراض stringList في المثال الخاص بك هو مجرد ما يبدو :)). ما لم يكن هناك سبب ما تريد أن يتوقف عن فعل شيء لكل سلسلة في قائمتك (أي معالجة فقط السلاسل 3 الأولى). ومن شأن ذلك أن يكون السبب الوحيد الذي لديه عداد داخل حلقة foreach الخاص بك. أنا فقط نعيد قراءة OP. والسبب الآخر هو أن تعرف كم عدد السلاسل التي قمت معالجتها.

وآمل أن يساعد هذا! تيريزا

وليس هناك مكرر خفية.

ووi متغير في المثال الخاص بك لا لزوم لها.

وPS: إذا كنت <م> قيام تحتاج i لتتبع شيئا، فما استقاموا لكم فاستقيموا التهيئة قبل كنت تعتمد عليه

.
وتنفذ

وحلقات foreach باستخدام العداد الذي يتتبع العد. إذا كنت تريد أن تعرف كم عدد الحلقات كنت قد ذهبت من خلال تحتاج إلى استخدام لحلقة أو تتبع تعول نفسك.

وهناك مقابل كل حلقة سوف تتبع العداد بالنسبة لك.

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

و(عذرا عن bastardisation من VB و C #، أنا قوسين النوع المجعد من الرجل - ربما الأفضل أن نفكر في الأمر على النحو الزائفة رمز)

ورمز أعلاه سوف يظهر

<اقتباس فقرة>   

واحدة

     

واثنين

     

وثلاثة

وإذا كان من شأنه تجميع. :)

وأنت بالتأكيد لا تحتاج إلى توفير عدد صحيح الخارجي الخاص بك.

وعلى الرغم من ذلك، هناك لم مخبأة <م> مكافحة . هناك مخبأة <م> العداد . والفرق هو أن ليس كل ما يمكن كرر يمكن الوصول إليها المؤشر. في بعض الأحيان لا يمكنك الحصول على البند التالي في تسلسل حتى كنت قد حسبت البند السابق. لذلك فإن العداد قد تستخدم آلة الدولة التي تتعقب الموقف الحالي الخاص بك وإرجاع البند التالي من أجل كل تكرار للحلقة، بدلا من استخدام العداد.

وجزء من سحر "عن كل" هو أنك لا تحتاج إلى تتبع حلقة incrementor نفسك. يتم ذلك بالنسبة لك. تستطيع قراءة وثائق تشير إلى واجهة "IEnumerable" ويقولون انه يجب تنفيذ "GetEnumerator ()" وهو صحيح. توفر وظيفة GetEnumerator () هذا السحر.

وأعتقد أن هذا هو الصحيح. أنا متأكد من شخص ما سوف يصحح لي إذا غير ذلك.

من وجهة نظر كود أنيقة أنه سيكون من الرائع إذا كان العداد المتاحة مع. أولا () و.Last () الأساليب.

وبفك النسخة 1.0.2 نهائي ...

لتعداد:

{% 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