Есть ли более элегантный способ действия с первым и последним элементами перечисления foreach, чем count ++? - PullRequest
2 голосов
/ 16 июня 2010

Есть ли более элегантный способ воздействовать на первый и последний элементы при итерации цикла foreach, чем приращивать отдельный счетчик и проверять его каждый раз?

Например, выводится следующий код:

>>> [line1], [line2], [line3], [line4] <<<

, который требует знания того, когда вы действуете с первым и последним элементом.Есть ли более элегантный способ сделать это сейчас в C # 3 / C # 4?Кажется, я мог бы использовать .Last () или .First () или что-то в этом роде.

using System;
using System.Collections.Generic;
using System.Text;

namespace TestForNext29343
{
    class Program
    {
        static void Main(string[] args)
        {
            StringBuilder sb = new StringBuilder();
            List<string> lines = new List<string>
            {
                "line1",
                "line2",
                "line3",
                "line4"
            };
            int index = 0;
            foreach (var line in lines)
            {
                if (index == 0)
                    sb.Append(">>> ");

                sb.Append("[" + line + "]");

                if (index < lines.Count - 1)
                    sb.Append(", ");
                else
                    sb.Append(" <<<");

                index++;
            }

            Console.WriteLine(sb.ToString());
            Console.ReadLine();
        }
    }
}

Ответы [ 11 ]

0 голосов
/ 16 июня 2010
int i, iMax;
i = iMax = lines.length;
sb.Append(">>> "); // ACT ON THE FIRST ITEM
while(i--) {
  sb.Append("[" + lines[length - i] + "]"); // ACT ON ITEM
  if(i) {
    sb.Append(", ");  // ACT ON NOT THE LAST ITEM
  } else {
    sb.Append(" <<<");  // ACT ON LAST ITEM
  }
}

Я обычно использую этот подход, обрабатываю одну границу перед циклом, затем обрабатываю другую внутри цикла.И я также люблю уменьшать, а не увеличивать.Я думаю, что это в основном пользовательские предпочтения, хотя ...

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...