En Visual Basic 6.0
FOR | FOR EACH |
For i = 0 To 9 MsgBox vector(i) Next i | For Each vec In vector MsgBox vec Next |
En C#
FOR | FOREACH |
for (int i = 0; i < vector.Length; i++) { MessageBox.Show(vector[i].ToString()); } | foreach (int vec in vector) { MessageBox.Show(vec.ToString()); } |
En PHP
FOR | FOREACH |
for ($i = 0; i < count($vector); $i++) { echo $vector[$i]; } | foreach ($vector as $vec) { echo $vec; } |
Como podemos observar, en los 3 lenguajes que citamos, aparentemente el foreach es más cómodo a la hora de escribir. Pero que pasa con el rendimiento? es el mismo?
No, no es lo mismo internamente consume mas recursos el foreach, no es lo mismo ir incrementando un índice e ir a buscar a memoria el dato con ese índice, que traer todo el elemento entero. En nuestro caso el elemento es unicamente un entero, pero que pasa si la estructura es mas compleja? Ahí notamos la diferencia aunque esto es un decir, debido a que con la velocidad de procesamiento, sería imperceptible.
Mi Sugerencia
A mi particularmente no me agrada el tema de usar ciclos, trato de evitarlo siempre que pueda (por ejemplo utilizando Reflexión en caso de ser posible). Cuando el ciclo es realmente necesario, les voy a ser sincero me inclino más por el foreach, solo por una cuestión de comodidad, porque como mencionamos anteriormente su rendimiento es mucho peor con respecto al del for.
Mi Sugerencia
A mi particularmente no me agrada el tema de usar ciclos, trato de evitarlo siempre que pueda (por ejemplo utilizando Reflexión en caso de ser posible). Cuando el ciclo es realmente necesario, les voy a ser sincero me inclino más por el foreach, solo por una cuestión de comodidad, porque como mencionamos anteriormente su rendimiento es mucho peor con respecto al del for.
Que tal como estas
ResponderEliminarRefiriendonos a los ciclos quiesiera hacerte una consulta como puedo hacer para comparar dos ciclos de 2 listview y eliminar los items que sean iguales y me deje los diferentes
te agradeceria me puedieras apoyar con este tema Brother
Saludos
Samuel,
ResponderEliminarya que no me dijiste en que lenguaje estas programandolo, voy a explicarte la logica que deberias aplicar.
Lo que tendrias que hacer es recorrer en primer lugar uno de los 2 listviews y para cada registro que leas, deberias recorrer el otro listview en busca de esa igualdad. En caso de encontrarse el elemento en el segundo listview deberias eliminarlo. De esta forma cuando tu ciclo finalice, tendrias ambos listview sin repetir elementos.
Esta solucion es en caso de que no importe sobre cual eliminar repetidos, sino tendrias que ajustarla.
for (int i = 0; i < Lista1.Items.Length; i++)
{
for (int k = 0; k < Lista2.Items.Length; k++)
{
if(Lista1.Items[i].Value == Lista2.Items[k].Value)
{
//Remover el item "k" de la Lista2
break;
}
}
}
El codigo podria variar dependiendo el lenguaje que uses, pero la idea es anidar 1 ciclo dentro del otro.
Espero que te haya servido.
Saludos