| |||
![]() 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 |
| |||
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. |
| |||
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 |
| ||||
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 |
| |||
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.. |
| |||
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! |