Цикл по массиву без исключения - PullRequest
2 голосов
/ 21 января 2009

Скажите, у меня есть массив значений:

string[] text = new string[] { "val1", "val2", "val3", "val4", "val5" };

Тогда у меня есть базовый цикл:

for (int i = 0; i <= 30; i++)
{
    Console.WriteLine(i + " = " + text[i])
}

Очевидно, что это вызовет исключение вне границ, поэтому я хочу, чтобы счетчик достиг верхней границы массива и вернулся к началу.

So

0 = val1    
1 = val2    
2 = val3    
3 = val4    
4 = val5    
5 = val1    
6 = val2    
7 = val3    
etc..

Ответы [ 7 ]

13 голосов
/ 21 января 2009

Вы можете использовать оператор модуля:

Console.WriteLine(i + " = " + text[i % 5])
12 голосов
/ 21 января 2009

Возьмите модуль длины массива:

for (int i = 0; i < 30; ++i)
{
    Console.WriteLine(i + " = " + text[i % text.Length]);
}
5 голосов
/ 21 января 2009

Попробуйте

for(int i=0;i<=30;i++)
{
    Console.WriteLine(i + " = " + string[i % 5])
}
2 голосов
/ 21 января 2009

Как чуть менее конкретное решение ...

class Program
{
    static void Main(string[] args)
    {
        string[] text = new string[] { "val1", "val2", "val3", "val4", "val5" };

        int count = 0;
        foreach (string t in text.ContinuousLoopTo(30))
        {
            Console.WriteLine(count.ToString() + " = " + t);
            count++;
        }

        Console.ReadLine();
    }
}

public static class Extensions
{
    public static IEnumerable<T> ContinuousLoopTo<T>(this IList<T> list, int number)
    {
        int loops = number / list.Count;

        int i = 0;

        while (i < loops)
        {
            i++;

            foreach (T item in list)
            {
                yield return item;
            }
        }

        for (int j = 0; j < number % list.Count; j++)
        {
            yield return list[j];
        }
    }
}
2 голосов
/ 21 января 2009

Не должно ли быть:

Console.WriteLine(i + " = " + text[i % text.length])

1 голос
/ 21 января 2009

Писатель должен быть:

Console.WriteLine(i + " = " + text[i%5]);
1 голос
/ 21 января 2009

что? как навсегда?

bool run = true;
int i = 0;
string[] text = new string[] {"val1", "val2", "val3", "val4", "val5"};
while(run)
{
   Console.WriteLine(i + " = " + text[i])
   i++;
   if(i>=text.Length) i=0;
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...