Foros del Web » Programación para mayores de 30 ;) » .NET »

recorrer matriz y comparar un dato para eliminarlo

Estas en el tema de recorrer matriz y comparar un dato para eliminarlo en el foro de .NET en Foros del Web. buenas nuevamente por aqui-... con una nueva consulta.-. para recorrer una matriz lo puedo hacer con un for o dos en realidad verdad? la matriz ...
  #1 (permalink)  
Antiguo 30/06/2011, 16:46
 
Fecha de Ingreso: agosto-2008
Mensajes: 367
Antigüedad: 16 años, 2 meses
Puntos: 5
Pregunta recorrer matriz y comparar un dato para eliminarlo

buenas nuevamente por aqui-... con una nueva consulta.-.

para recorrer una matriz lo puedo hacer con un for o dos en realidad verdad?
la matriz es asi

static string[,] clientes = new string[2, 4];

en esta matriz yo cargo datos de clientes.. nombre y cedula.

para mostrar estos datos como listado lo hago asi

static public void listado()
{
for (int x = 0; x < 4; x++)
{

for (int i = 0; i < 2; i++)
{
Console.Write(clientes [i, x] + " ");


}
Console.WriteLine("");



}opciones_clientes();
}


mi consulta es. como recorro esta matriz y comparo si una cedula ingresada es igual a alguna existente.en la matriz para eliminar esa cedula existente y su nomre???????
  #2 (permalink)  
Antiguo 30/06/2011, 17:07
Avatar de ldcd  
Fecha de Ingreso: enero-2010
Ubicación: Distrito Federal
Mensajes: 57
Antigüedad: 14 años, 10 meses
Puntos: 6
Respuesta: recorrer matriz y comparar un dato para eliminarlo

Bueno, pues si la cedula siempre esta en la segunda posicion de tu arreglo lo puedes hacer con un solo for de la siguiente manera:

Código:
static public void agregar(string cedula)
{
for (int x = 0; x < clientes.Count; x++)
{

if(cedula == clientes[i,1])
{
clientes.RemoveAt(i);
}

}
}
Me parece q con esa instruccion es con la que eliminas por indice de un arreglo.

Sin enbargo, una observación, así lo puedes eliminar al momento de comparar, pero si eliminas uno, los indices ya no van a coincidir con el recorrido, yo te recomendaria hacer algo asi para guardar los indices de los repetidos en un arreglo temporar y despues eliminarlos de atras hacia adelante.

Código:
int [] temp;

static public void agregar(string cedula)
{
for (int x = 0; x < clientes.Count; x++)
{

if(cedula == clientes[x,1])
{
temp.Add(i);
}

}

for (int x = 0; x < temp.count; x++)
{

clientes.RemoveAt(temp[x]);

}
}
Espero te sirva.

Saludos
  #3 (permalink)  
Antiguo 30/06/2011, 17:09
 
Fecha de Ingreso: abril-2011
Mensajes: 1.342
Antigüedad: 13 años, 6 meses
Puntos: 344
Respuesta: recorrer matriz y comparar un dato para eliminarlo

Tienes que tener en cuenta que en un array no puedes borrar elementos, sólo sobreescribirlos. Si quieres añadir y eliminar dinámicamente puedes usar clases de System.Collections como ArrayList, List, ...

Si lo que quieres es buscar un elemento en la matriz y sobreescribirlo, tendrías que recorrerla e ir comparando (puedes crear una función que lo realice).
  #4 (permalink)  
Antiguo 30/06/2011, 17:22
 
Fecha de Ingreso: agosto-2008
Mensajes: 367
Antigüedad: 16 años, 2 meses
Puntos: 5
Respuesta: recorrer matriz y comparar un dato para eliminarlo

ldcd : no comprendo lo que me dices.. porque mi matriz tiene dos datos uno es nombre y el otro cedula... con la forma que la recorres solo recorro hacia una direccion y no es la idea... por otro lado esto if(cedula == clientes[i,1]) no lo comprendo porque i,1 1 es fijo y no me sirve.. disculpenme pero estoy recien aprendiendo de esto... y este es mi proyecto numero 1 para una entrega de la carrera.....

alexg : lo que me dicessin duda es lo que quiero hacer... recorrer la matriz y compararla a una variable que se llamara cedula....... pero no se como hacerlo.. la matriz devuelve.. nombre y cedula segun cuantos clientes tenga verdad

ahora la recorro con los for... matriz[i,x] como comparo mi variable cedula a el campo cedula de la matriz... ????


se que hay q sobreescrivirla o ponerla como nula.. eso es otra cosa que tengo que ver como se hace
  #5 (permalink)  
Antiguo 30/06/2011, 17:45
Avatar de ldcd  
Fecha de Ingreso: enero-2010
Ubicación: Distrito Federal
Mensajes: 57
Antigüedad: 14 años, 10 meses
Puntos: 6
Respuesta: recorrer matriz y comparar un dato para eliminarlo

Si efectivamente como dic alexg88 lo que yo puse fue para un List, por q efectivamente de un array no es posible eliminar elementos.

Deje fijo el i,1 por que unicamente necesitas la cedula, que siempre va a estar en la misma posicion, lo unico q va a cambiar es la fila, pero la columna siempre va a ser 1, es decir, la segunda posicion, es por eso q solo necesitas un for, por q no necesitas recorrer todas las columnas, unicamente las filas y comprara siempre la misma columna
  #6 (permalink)  
Antiguo 30/06/2011, 18:44
 
Fecha de Ingreso: agosto-2008
Mensajes: 367
Antigüedad: 16 años, 2 meses
Puntos: 5
Respuesta: recorrer matriz y comparar un dato para eliminarlo

bueno me ocurre un problema con eso.. y es el que siempre me paso... si lo hago solo con un for para recorrer la matriz. sin importar cual sea el largo que le ponga o si le pongo que lo lea el mismo programa.. con un matriz.lenght siempre me dice que estoy fuera de los parametros de la misma... count no aplica para aqui......

asi que si o si la tengo que recorrer con dos for. para que no me ocurra eso.. de esta forma

static public void baja_cliente()
{
datos();
string opcion="0";


Console.Write("ingrese cedula :");
opcion = Console.ReadLine();

for (int x = 0; x < 4; x++)
{
for (int i = 0; i < 2; i++)
{
if (opcion == clientes[i, x])

{
Console.WriteLine(clientes[i, x]);
}
}

}


}


ahora el problema es que asi como puse un simple Console.WriteLine(clientes[i, x]); para que me muestre algo. luego vere como anulo o sobre escribo eso.. lo que quiero es poner que si no encuntra nada.. tambien me lo diga... pero no me sale. osea

si la cedula no existe me diga algo... pero no me sale si pongo un else o algo asi luego del if. me lo lee a continuacion y no luego de todo el for.. o de lo contrario si encuentra algo tambien me lee el else. no se donde le estoy errando.. gracias .. espero sepan como solucionar esto.. muy agradecido
  #7 (permalink)  
Antiguo 01/07/2011, 03:54
 
Fecha de Ingreso: abril-2011
Mensajes: 1.342
Antigüedad: 13 años, 6 meses
Puntos: 344
Respuesta: recorrer matriz y comparar un dato para eliminarlo

Está claro que si es una matriz multidimensional, tienes que recorrerla con dos bucles for, aunque también está la posibilidad de utilizar un bucle foreach (sólo si quieres imprimir los elementos de la matriz).

El problema que veo es que realizas los bucles al reves:

Código C#:
Ver original
  1. static public void baja_cliente()
  2. {
  3. datos();
  4. string opcion="0";
  5.  
  6. Console.Write("ingrese cedula :");
  7. opcion = Console.ReadLine();
  8.  
  9. for (int i = 0; i < nfilas; i++)
  10. {
  11. for (int j = 0; j < ncolumnas;j++)
  12. {
  13. if (opcion == clientes[i, j])
  14.  
  15. {
  16. Console.WriteLine(clientes[i, j]);
  17.  
  18. }
  19. }
  20.  
  21. }
  22.  
  23. }

Fíjate en como se realiza el doble bucle (a diferencia de como lo has intentado hacer). Si quieres salir del bucle al llegar a la opción elegida, utiliza break.

Etiquetas: dato, matriz, recorrer
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 11:00.