Supponiamo di avere una raccolta a rotazione di valori in cui viene specificata la dimensione della raccolta e ogni volta che viene aggiunto un nuovo valore, vengono eliminati tutti i vecchi valori oltre la dimensione specificata. Ovviamente (e ho provato questo) il miglior tipo di raccolta da utilizzare per questo comportamento è una coda:Come otterresti il primo e l'ultimo elemento in una coda?
myQueue.Enqueue(newValue)
If myQueue.Count > specifiedSize Then myQueue.Dequeue()
Tuttavia, quello che se voglio calcolare la differenza tra il primo e l'ultimo elemento nella coda? Ovviamente non posso accedere agli articoli per indice. Ma passare da una coda a qualcosa che implementa IList sembra eccessivo, così come scrivere una nuova classe in stile Queue. In questo momento ho:
Dim firstValue As Integer = myQueue.Peek()
Dim lastValue As Integer = myQueue.ToArray()(myQueue.Count - 1)
Dim diff As Integer = lastValue - firstValue
che richiamano alla ToArray()
mi preoccupa, ma un'alternativa superiore non è venuta a me. Eventuali suggerimenti?
C# non ha un tipo di coda di riacquisto? –
No, C# non ha alcun tipo, .Net è ciò che ha tipi; e .Net non ha un tipo di Dequeue, ha un tipo Queue/Queue che ha un metodo Dequeue. –