我试图将项目出列,如果它们包含某个字符串。这是我希望可以工作的想法,但不是:
Dim baseUri As String = myuri.GetLeftPart(UriPartial.Authority)
For i = workerURLs.Count - 1 To 0 Step -1
If workerURLs(i).Contains(baseUri) Then
workerURLs.Dequeue(i)
End If
Next
由于队列方法没有"在索引处排队"像列表这样的选项我怎么能做到这一点?
答案 0 :(得分:1)
实现它的一种方法是包装Queue(Of T)
并在元素从中间“出列”时重新创建它:
Class IndexableQueue(Of T)
Private _queue As New Queue(Of T)()
Public Sub Enqueue(item As T)
_queue.Enqueue(item)
End Sub
Public Function Dequeue() As T
Return _queue.Dequeue()
End Function
Public Function Dequeue(index As Integer) As T
Dim list = _queue.ToList()
Dim item = list(index)
list.RemoveAt(index)
_queue = New Queue(Of T)(list)
Return item
End Function
End Class
这是最简单的实现,虽然它不是最有效的,因为我们在每次调用Queue
时重新创建Dequeue(Integer)
。但如果它不常见并且队列不大,那应该没问题。
最好的方法是完全重新实现Queue
并使用List
而不是数组作为基础类型。