Iteraciones en C#

A pedido del público, voy a hacer este post donde mostramos las formas de Iterar en C#. Estuve mirando que tengo muchos accesos al blog con estas palabras: Iteraciones en C#, entonces, hablemos de ello.

Carga de una lista:

List<string> list = new List<string>();

list.Add("Visual Basic Dynamic");
list.Add("IronPython");
list.Add("Ruby");
list.Add("Javascript");

Iteremos !

1. Utilizando foreach:

foreach(string item in list)
{
    Console.WriteLine(item);
}

2. Utilizando IEnumerator:

IEnumerator<string> ie = list.GetEnumerator();

while(ie.MoveNext())
{
    Console.WriteLine(ie.Current);
}

 3. Utilizando for:

for(int i = 0; i < list.Count; i++)
{
    Console.WriteLine(list[i]);
}

 4. Usando metodo .ForEach(System.Action<T>):

list.ForEach( delegate(string str)  { Console.WriteLine(str); } );

 5. Metodo 4, pero sacando ventaja de la inferencia de tipos:

list.ForEach(Console.WriteLine);

¿Cuál es más rapido? No me atrevo a decir que método es más rapido, he hecho una clase de prueba [Iteraciones.cs], con 10000 iteraciones (nunca tengo tanto para iterar), y llegué a resultados similares.

Con Mono en Linux, he notado un poco más de rapidez que con Mono en Windows, inclusive más rapidez que con .Net de Microsoft. En Windows y Linux (Ubuntu 7.04) he usado Mono 1.2.3.1 version.

Caracteristicas de la laptop: Procesador Intel Core 2 Duo T5600 1.83GHz, 512Mb DDR2-667.

Considero que todas las formas son claras, son estructuras bien conocidas y cualquiera de ellas resulta facil de leer. Hay que usar la que más convenga llegado el caso. Por ejemplo:

1. for es más útil cuando conocemos los limites de la iteración, y también si queremos en todo momento consultar por qué número de iteración vamos.

2. foreach es para ir tratanto cada ítem dentro de su estructura. No es muy útil si se tiene que hacer castings por cada ítem.

3. IEnumerator, es para aplicar el patron iterator sin ninguna duda. Y así ir iterando al siguiente item.

4. ForEach, sin duda la ventaja de este este método es la única linea que se necesita. Se trata de una estructura que recibe como parámetro un delegado Action<T>, y dentro de sí, existe una iteración. Mono realiza esta iteración usando un foreach, y el .net framework de ms usa un for. Cuestion de gustos quizas. 

1 comment so far

  1. [...] este post previo, hablábamos sobre las iteraciones en C# y donde dije que Mono me resultó un poco más rápido en [...]

Leave a comment

Please be polite and on topic. Your e-mail will never be published.