remove objects from duplicate c# collections duplicates icollection

objects - Necesita duplicados permitidos en SortedCollection(C#, 2.0)



remove duplicate objects from list c# (3)

Tengo un proyecto en el que estoy trabajando que requiere cambiar una clase ''BaseSortedCollection'' para permitir duplicados. La clase actualmente implementa IEnumerable, IDisposable, ICollection e ISerializable. El ''BaseSortedCollection'' almacena Elementos que tienen un ItemID (Int64), que se utiliza como la clave al acceder a la colección. Necesito tener dos elementos idénticos (mismo ItemID) en la colección al mismo tiempo y poder recuperarlos.

Estamos usando el marco 2.0.

¿Alguna sugerencia?

¡Gracias por adelantado!


Cada elemento en su BaseSortedCollection podría ser una Lista (T), de modo que si tiene dos elementos con la misma clave, tendrá una Lista (T) que contiene dos elementos para la entrada correspondiente a esa clave.


Supongo que tendrá que extender una ArrayList regular y anular el método Add para llamar a Sort si necesita la clasificación automática. Sin embargo, parece que no puedo entender la idea de dos artículos con el mismo número de identificación (lo que debería ser único).

¿Editar, o tal vez NameValueCollection (en System.Collections.Specialized) es más apropiado? Extiéndalo y agregue su propio método de clasificación ...


Supongo que está extendiendo un tipo de diccionario que no permite duplicar claves.

¿Qué hay de esta implementación? Supongo que su artículo implementa IComparable.

class BaseSortedCollection<T> : Collection<T>, ICollection<T>, IEnumerable<T>, System.Collections.ICollection, System.Collections.IEnumerable where T : IComparable<T> { /// <summary> /// Adds an item to the Collection<T> at the correct position. /// </summary> /// <param name="item">The object to add to </param> public new void Add(T item) { int pos = GetInsertPositio(item); base.InsertItem(pos, item); } /// <summary> /// Convinience function to add variable number of items in one Functioncall /// </summary> /// <param name="itemsToBeAdded">The items to be added.</param> /// <returns>this to allow fluent interface</returns> public AutoSortCollection<T> AddItems(params T[] itemsToBeAdded) { foreach (var item in itemsToBeAdded) Add(item); return this; } /// <summary> /// Get position where item should be inserted. /// </summary> /// <param name="item"></param> /// <returns>Get position where item should be inserted.</returns> private int GetInsertPositio(T item) { if (item == null) throw new ArgumentNullException(); for (int pos = this.Count - 1; pos >= 0; pos--) { if (item.CompareTo(this.Items[pos]) > 0) return pos + 1; } return 0; } }

esto debería funcionar (usando MsTest)

/// <summary> ///A test sorting for SCCPackageEx Constructor ///</summary> [TestMethod()] public void SortingTest() { BaseSortedCollection<int> collection = new BaseSortedCollection<int>().AddItems(1,5,3,2,4,0); Assert.AreEqual(6, collection.Count, "collection.Count"); for(int i=0; i <=5; i++) Assert.AreEqual(i, collection[i], "collection[" + i + "]"); }