fuente - ¿Por qué.Net Framework no tiene una clase de cola de prioridad?
colas en java ejemplos (2)
Hay algunos hilos en Stack Overflow que tratan con la implementación de colas de prioridad en .Net y C # .
Mi problema es de una naturaleza más básica: ¿por qué no hay una cola de prioridad lista para usar en el marco de .Net? Incluso la biblioteca estándar de C ++ tiene uno.
.NET 4.0 introduce una SortedSet<T>
, junto con la interfaz SortedSet<T>
implementada por SortedSet<T>
y HashSet<T>
. Obviamente, esto facilitará la implementación de su propia clase PriorityQueue<T>
.
Sin embargo, todavía no hay IQueue<T>
interfaz IQueue<T>
, que por lo menos admitiría la necesidad de colas de prioridad o cualquier otra implementación que la Queue<T>
BCL básica Queue<T>
. Del mismo modo, no hay IStack<T>
.
Personalmente, encuentro que esta falta de algunas de estas interfaces más básicas es decepcionante y miope, especialmente porque el costo de diseño / especificación / implementación / prueba / documentación de extraer una interfaz simple de una clase existente debería ser muy bajo.
public interface IQueue<T> : IEnumerable<T>, ICollection, IEnumerable
{
T Dequeue();
void Enqueue(T item);
T Peek();
}
Allí, ¿ves? Lo he hecho.
Hace un tiempo hubo una pregunta ( por qué C # permite funciones no asociadas a miembros como C ++ ) que incitaron a Eric Lippert a escribir una publicación en el blog sobre los motivos. En ella, explica:
Me preguntan "¿por qué C # no implementa la característica X?" todo el tiempo. La respuesta es siempre la misma: porque nunca nadie diseñó, especificó, implementó, probó, documentó y envió esa característica. Las seis cosas son necesarias para hacer que una característica suceda. Todos ellos cuestan enormes cantidades de tiempo, esfuerzo y dinero. Las funciones no son baratas, y nos esforzamos mucho para asegurarnos de que solo estemos enviando aquellas que brinden los mejores beneficios posibles a nuestros usuarios, dado nuestro limitado presupuesto de tiempo, esfuerzo y dinero.
Sospecho que probablemente sea la respuesta a la razón por la que .Net no se entrega con una cola de prioridad: simplemente no hubo suficiente tiempo, esfuerzo, dinero, demanda (?) Para implementar una.