Re[12]: Как получить обратный for each?
От: GlebZ Россия  
Дата: 13.09.06 12:05
Оценка:
Здравствуйте, <Аноним>, Вы писали:

А>Здравствуйте, GlebZ, Вы писали:


GZ>>А ты не сравнивай for и итератор. Это две разные категории. for — statement. iterator — паттерн который унифицирует и скрывает доступ. Эти вещи несравнимы так как обозначают два разных логических термина и служат для разных вещей.

А>А я по наивности своей считал, что они оба служат для перебора элементов коллекции или массива, с целью что-то с этими элементами делать в определённом порядке
Ну попробуй написать for для коллекции.
for — это операция цикла с счетчиком. Почти синтаксический сахар для while. А используется ли она для индексируемого доступа к массиву, или не используется — это уже второй вопрос. В случае iterator — это есть перебор значений коллекции (не обязательно массива) по некоторому алгоритму. При этом алгоритм может быть любым, как простым, так и очень сложным.
Кроме того, для большинства случаев, а это записи типа
for(int i=0;i<arr.Length;i++)
  val+=arr[i];

Здесь переменная i — есть суррогат который не несет никакой смысловой нагрузки. Пока ее не используют за пределами массива, или доступ не ограничен регионом, она бессмысленный мусор. В данном случае и сам цикл есть суррогат. Более наглядно что-то здесь будет что-то типа
Array.ForEach<T>(a => val+=a);

Но такое возможно только в C# 3.0. Пока что можно довольствоваться:
Array.ForEach<T>(delegate(int a){val+=a;});

Что несколько более многословно, но все таки более читабельно чем индексированный доступ через for. И заметь, в отличие от for такое работает для всех типов коллекций независимо от типа доступа.
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.