2010-03-15 5 views
14

Si solo quiero una lista ordenada de solo fechas, enteros o dobles, ¿es realmente necesario tener que definir una SortedList (de Entero, Entero)?¿Por qué la lista ordenada debe tener un par de valores clave?

Me parece intrigante, pero puede ser solo trival. Prefiero solo usar una SortedList (de Entero).

(Esta pregunta es en relación con las colecciones genéricas .Net)

+0

posible duplicado de [¿Hay una clase SortedList en .net? (no SortedList que en realidad es un tipo de SortedDictionnary)] (http://stackoverflow.com/questions/389813/is-there-a-sortedlistt-class-in-net-not-sortedlistkey-value-which-is- actuar) – nawfal

Respuesta

8

La próxima versión de .NET (4.0) tendrá la clase SortedSet que hace exactamente lo que usted desea. Hasta entonces, el encapsulamiento SortedList se acerca más, a menos que desee implementar una clase propia para hacer esto o use bibliotecas de colecciones externas (por ejemplo, C5 que tiene una clase SortedArray y TreeSet).

+5

SortedSet no agregará un elemento que sea igual al que ya está en el conjunto, como lo requiere la teoría de conjuntos. Una SortedList debe ser capaz de manejar múltiples instancias del mismo valor y ordenarlas correctamente. – gligoran

3

Puede utilizar un habitual List<T> y llame Sort en él.

+3

Esto puede ser ineficiente para listas grandes si se ordena con frecuencia; Además, debes recordar ordenarlo cada vez que cambie. –

-1

Creo que HashSet<int> puede satisfacer sus necesidades.

+2

Eso no está ordenado. Entonces, no. –

0

La lista ordenada se ordena en la clave y no en los valores. De MSDN

Los elementos de un objeto SortedList están ordenados por las llaves, ya sea acuerdo con una implementación específica IComparer especificado cuando se crea o según la implementación IComparable proporcionada por las propias teclas de SortedList. En cualquiera de los casos, una SortedList no permite duplicar claves.

Así que es básicamente una clase de diccionario que admite la clasificación. List por otro lado ordena en los valores

1

Sí, es necesario, porque así es como se diseñó la API. :-)

Pero no es difícil crear su propio SortedList<T> que utiliza SortedList<K,V>. 5 líneas de código?

class SortedList<T> : IEnumerable<T> { 
    SortedList<T,int> _list = new SortedList<T,int>(); 
    public IEnumerator<T> GetEnumerator() { return _list.Keys.GetEnumerator(); } 
    IEnumerator IEnumerable.GetEnumerator() { return this.GetEnumerator(); } 
    public void Add(T v) { _list.Add(v, 1); } 
    public int Count { get { return _list.Count; } } 
} 

El único problema es, SortedList no puede manejar los DUP.

+0

Solo necesita implementar también ienumerable no genérico. Ver http://stackoverflow.com/questions/8760322/troubles-implementing-ienumerablet. Lo he editado para ti. –

Cuestiones relacionadas