Скажите, что у меня есть сводная коллекция значений, где я указываю размер коллекции и в любое время добавляется новое значение, все старые значения, превышающие этот заданный размер, выпадают. Очевидно (и я проверил это) лучший тип коллекции, чтобы использовать для этого поведения является Queue:Как вы получите первый и последний пункты в очереди?
myQueue.Enqueue(newValue)
If myQueue.Count > specifiedSize Then myQueue.Dequeue()
Однако, если я хочу, чтобы вычислить разницу между первыми и последними элементами в очереди? Очевидно, что я не могу получить доступ к элементам по индексу. Но переключиться с очереди на что-то, что реализует IList, похоже, излишнее, как и запись нового класса Queue. Сейчас у меня есть:
Dim firstValue As Integer = myQueue.Peek()
Dim lastValue As Integer = myQueue.ToArray()(myQueue.Count - 1)
Dim diff As Integer = lastValue - firstValue
что звонить ToArray()
беспокоит меня, но лучшая альтернатива не приходит ко мне. Какие-либо предложения?
Не имеет ли тип C# типа Dequeue? –
Нет, у C# нет ни одного типа, .Net - это то, что имеет типы; и .Net не имеет типа Dequeue, он имеет тип Queue/Queue, который имеет метод Dequeue. –