A Queue è una raccolta FIFO (First-In-First-Out) (lo dice correttamente nella documentazione). Ciò significa che l'enumeratore ti fornisce gli articoli nell'ordine in cui sono stati aggiunti.
A Stack è una raccolta Last-In-First-Out (LIFO). Ciò significa che l'enumeratore ti fornisce gli articoli in ordine inverso rispetto a come sono stati aggiunti.
Stack e code sono costrutti di computer Science molto standard, quindi non possono essere ri-proposti senza un serio contraccolpo.Quando si guarda gli esempi per le GetEnumerator()
funzioni, documenta in modo chiaro l'ordine di elencazione:
Stack Enumeration:
Stack<string> numbers = new Stack<string>();
numbers.Push("one");
numbers.Push("two");
numbers.Push("three");
numbers.Push("four");
numbers.Push("five");
// A stack can be enumerated without disturbing its contents.
foreach(string number in numbers)
{
Console.WriteLine(number);
}
/* This code example produces the following output:
five
four
three
two
one
*/
Queue Enumeration:
Queue<string> numbers = new Queue<string>();
numbers.Enqueue("one");
numbers.Enqueue("two");
numbers.Enqueue("three");
numbers.Enqueue("four");
numbers.Enqueue("five");
// A queue can be enumerated without disturbing its contents.
foreach(string number in numbers)
{
Console.WriteLine(number);
}
/* This code example produces the following output:
one
two
three
four
five
*/
Anche in questo caso, con le definizioni di informatica di base, Enumeratore o l'iteratore deve presentare gli elementi nell'ordine naturale per una raccolta. I tipi di raccolta specifici hanno un ordine definito.
Caveat
Si prega di notare che mentre il processo di enumerazione fa riflettere l'ordine naturale delle collezioni FIFO e LIFO (ref), questo non è come Code (ref) e pile (ref) sono destinato da essere usato. Sono concepiti per essere utilizzati con le interazioni Enqueue()
/Dequeue()
e Push()
/Pop()
/Peek()
. Microsoft include l'enumeratore per mantenere tutto coerente con l'interfaccia di base ICollection<T>
e mantiene l'enumeratore nell'ordine naturale della raccolta.
Lo scopo di una coda è fornire una pipeline di lavoro che può essere elaborata in ordine. Lo scopo di una pila è di fornire un modo per tornare a un contesto precedente quando il lavoro locale è terminato. Sono destinati a lavorare su un oggetto alla volta. Iterazione sulla raccolta con un tipo di enumeratore di passaggi laterali che ha lo scopo completo e non rimuove gli elementi dalla coda/pila. È essenzialmente una sbirciatina in tutti gli oggetti che ci sono.
fonte
2016-06-09 12:17:42
Stai confrontando cose diverse. Stack, code, matrici, liste, hanno una garanzia di ordine forte mentre il dizionario non ne ha. Hai riscontrato un problema specifico? –
Ho trovato [una domanda molto simile] (http://stackoverflow.com/questions/2628048/stack-tolist-in-net-order-of-elements) –
@PanagiotisKanavos No, non l'ho fatto. Ma questo è irrilevante. A dire il vero per alcuni anni, io giovane ho usato l'enumerazione 'Dictionary' e il codice è stato costruito in modo che dipendesse dall'ordine di enumerazione ed è stato terribile. Non mi sono mai imbattuto in un caso in cui 'Dictionary' cambia l'ordine di enumerazione. Questo non rende l'errore più terribile. –