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

Using List.Contains()

Estas en el tema de Using List.Contains() en el foro de .NET en Foros del Web. Buenas foreros espero me puedan ayudar yo estoy utilizando una lista que maneja 3 propiedades (que me representarian 3 columnas por decirlo ) necesito recorrer ...
  #1 (permalink)  
Antiguo 10/03/2008, 17:41
 
Fecha de Ingreso: abril-2005
Mensajes: 501
Antigüedad: 19 años
Puntos: 1
De acuerdo Using List.Contains()

Buenas foreros espero me puedan ayudar yo estoy utilizando una lista que maneja 3 propiedades (que me representarian 3 columnas por decirlo ) necesito recorrer esta lista y saber si un elemento existe, no quiero recorrerlo con un for asi q me dijeron utilize constains() pero quisera pasar por parametro solo un campo por decir (la propiedad ID) y no todo el item me dijeron implemnetar GetHashCode pero ni idea de como hacerlo espero me puedan ayudar
  #2 (permalink)  
Antiguo 10/03/2008, 18:23
Avatar de Peterpay
Colaborador
 
Fecha de Ingreso: septiembre-2007
Ubicación: San Francisco, United States
Mensajes: 3.858
Antigüedad: 16 años, 8 meses
Puntos: 87
Re: Using List.Contains()

pues aqui te pongo un sample pequeño


class Alumno
{

public string name;
public string id;
public string school;
}

class Alumnos : ICollection<Alumno>
{

#region ICollection<Alumno> Members

public bool Contains(Alumno item)
{
foreach (Alumno current in this)
{
if (current.Equals(item))
return true;
}
return false;
}

public bool Contains(string id)
{
foreach (Alumno current in this)
{
if (current.id.Equals(id))
return true;
}
return false;
}


#endregion
}
  #3 (permalink)  
Antiguo 11/03/2008, 08:22
 
Fecha de Ingreso: abril-2005
Mensajes: 501
Antigüedad: 19 años
Puntos: 1
Re: Using List.Contains()

hola gracias amigo pero estaba viendo si se podia hacer algo asi:

List<PriorityQueueItem> mSortedList;

public List<PriorityQueueItem> List
{
get { return mSortedList; }
set { mSortedList = value; }
}


public bool Contains(PriorityQueueItem item)
{
return mSortedList.Contains(item);
}

pero no quisera pasarle por parametro el item sino como pusiste en el ejmplo el id , pero aca veo qu no se utiliza el foreach es posible realizar lo que quiero sin hacer uso del foreach es que yo verifico la data de un datatable y por cada data del datatable va entrar al foreach imaginate nose eso pareciera no muy optimo o estoy equivocado espero comentarios gracias.
  #4 (permalink)  
Antiguo 11/03/2008, 08:39
Avatar de Peterpay
Colaborador
 
Fecha de Ingreso: septiembre-2007
Ubicación: San Francisco, United States
Mensajes: 3.858
Antigüedad: 16 años, 8 meses
Puntos: 87
Re: Using List.Contains()

sobrecarga.

saludos peter. pero aun asi contains valida internamente por lo q tendras q hacer un for necesariamente

saludos
peter
  #5 (permalink)  
Antiguo 11/03/2008, 09:15
 
Fecha de Ingreso: abril-2005
Mensajes: 501
Antigüedad: 19 años
Puntos: 1
Re: Using List.Contains()

haber te cuento amigo haber si me das una mano lo que pasa es que yo tengo una cola (en este caso una lista de datos)...

a mi cada cierto tiempo me mandan un datatable para actualizar la cola.

1) tengo que verificar que si hay datos que me trae el datatable y no existen en la cola estos se agreguen a la cola para eso recorro el datatable

foreach (DataRow row in datatable.Rows) //1er bucle
{
//verificar que no existe el dato en la cola
list.constains(row["id"]) //2do bucle
}

2) verificar que si mi cola tiene algun y el datatable ya no lo trae, entonces tengo que eliminar el dato:

foreach (PriorityQueueItem item in mPriorityQueue.List)//3er bucle de la lista
{
if (!Exists(item.id))
//4to bucle - es un bucle que recorre el datatable para verificar si el id existe

}

conclusion: tengo que hacer todos estos pasos cada cierto tiempo (cada 3 min aprox) para actualizar la cola ¿como optimizar esto? xq a primera impresion se ve muy lento ... gracias por sus ayudas y sugerencias que me seria de gran ayuda
  #6 (permalink)  
Antiguo 11/03/2008, 09:22
Avatar de Peterpay
Colaborador
 
Fecha de Ingreso: septiembre-2007
Ubicación: San Francisco, United States
Mensajes: 3.858
Antigüedad: 16 años, 8 meses
Puntos: 87
Re: Using List.Contains()

supongo q estas usando un dataadapter y un datatable por lo q te pregunto no sera mejor

hacer un datatable.GetChanges() y de ahi iterar por cada fila y ver su rowstate en 1 solo ciclo y si esta borrada no la agregas.


saludos
peter
  #7 (permalink)  
Antiguo 11/03/2008, 09:29
 
Fecha de Ingreso: abril-2005
Mensajes: 501
Antigüedad: 19 años
Puntos: 1
Re: Using List.Contains()

Hola peter nuevamente gracias, no estoy usando dataadapter yo tengo una clase "cola" la cual es alimnetada por un datatatable pero este me es enviado de un webservice, el webservice envia el datatatable a la apliacacion... yo recupero ese datatable y lo mando por parametro a aplicacion "cola" para que lo actualize..
  #8 (permalink)  
Antiguo 11/03/2008, 09:44
Avatar de Peterpay
Colaborador
 
Fecha de Ingreso: septiembre-2007
Ubicación: San Francisco, United States
Mensajes: 3.858
Antigüedad: 16 años, 8 meses
Puntos: 87
Re: Using List.Contains()

puedes hacer un dataTable.GetChanges(RowState.Added); y veas q columnas se agregaron , cuales se eliminaro etc etc.

saludos
peter
  #9 (permalink)  
Antiguo 11/03/2008, 10:35
 
Fecha de Ingreso: abril-2005
Mensajes: 501
Antigüedad: 19 años
Puntos: 1
Re: Using List.Contains()

tendras un pequeño codigo para ver si aplica es que no se como aplicarlo antes de la asigancion despues gracias.
  #10 (permalink)  
Antiguo 11/03/2008, 10:44
Avatar de Peterpay
Colaborador
 
Fecha de Ingreso: septiembre-2007
Ubicación: San Francisco, United States
Mensajes: 3.858
Antigüedad: 16 años, 8 meses
Puntos: 87
Re: Using List.Contains()

dame 1 par de horas

saludos
peter
  #11 (permalink)  
Antiguo 11/03/2008, 11:08
 
Fecha de Ingreso: abril-2005
Mensajes: 501
Antigüedad: 19 años
Puntos: 1
Re: Using List.Contains()

ok gracias
  #12 (permalink)  
Antiguo 10/03/2010, 15:27
 
Fecha de Ingreso: marzo-2010
Mensajes: 1
Antigüedad: 14 años, 1 mes
Puntos: 0
Respuesta: Using List.Contains()

Lo mejor y más rápido es que implementes la interfaz IEquatable en la clase de la cual tienes la lista.

Solamente luego solamente tendrías que implementar el método "Equals"...

Ejemplo:

1. Definición de la clase:

internal class Alumno : IEquatable<Alumno>
{
int _id;
string _nombre;

public int Id
{
get { return _id; }
set { _id = value; }
}

public string Nombre
{
get { return _nombre; }
set { _nombre = value.Trim(); }
}

public Alumno(int id, string nombre)
{
this.Id = id;
this.Nombre = nombre;
}

public bool Equals(Alumno otherAlumno)
{
if (this.Id == otherAlumno.Id)
true;
else
false;
}
}

2. Utilización en una lista

List<Alumno> alumnos = new List<Alumno>();

Alumno tmpAlumno = new Alumno(1,"fulano");
alumnos.Add(tmpAlumno);

tmpAlumno = new Alumno(2,"mengano");
alumnos.Add(tmpAlumno);


if(alumnos.Contains(tmpAlumno))
//Existe!


Saludos!
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 15:28.