我正在尝试在VB.NET中创建一个有序的元组链表。目前我遇到了排序部分的问题。目前,我只是在插入一个新节点和使用AddBefore或AddAfter时进行迭代,但我一直遇到语法错误。
For node In LinkedList
If node.Item1 < results.Item1 Then
LinkedList.AddBefore(node, newnode)
ElseIf node.Item1 = results.Item1 Then
LinkedList.AddAfter(node, newnode)
ElseIf LinkedList.Last.Equals(node) Then
LInkedList.AddLast(results)
End If
Next
它只是说有一个语法错误,当我尝试这个时:
For Each node In LinkedList
If node.Item1 < results.Item1 Then
LinkedList.AddBefore(node, newnode)
ElseIf node.Item1 = results.Item1 Then
LinkedList.AddAfter(node, newnode)
ElseIf LinkedList.Last.Equals(node) Then
LInkedList.AddLast(results)
End If
Next
我收到一个错误,该节点不是合适的类型,因此AddBefore和AddAfter将不起作用。我该如何解决这个问题?
newnode的创建方式如下:
newnode = New LinkedListNode(Of Tuple(Of Double, String))(results)
答案 0 :(得分:1)
AddBefore
,AddAfter
和AddLast
成员期望将节点作为第一个参数。在For Each
上使用LinkedList
时,将返回的值不是节点。
要遍历LinkedList
的节点,您可以使用First
属性获取第一个节点,然后在每个节点上使用Next
。要获得每个节点的值,您必须使用Value
属性:
Dim node = linkedList.First
While node IsNot Nothing
If node.Value.Item1 < results.Item1 Then
linkedList.AddBefore(node, newnode)
ElseIf node.Value.Item1 = results.Item1 Then
linkedList.AddAfter(node, newnode)
ElseIf linkedList.Last.Equals(node) Then
linkedList.AddLast(results)
End If
node = node.Next
End While
另一种选择是使用System.Collections.Generic.SortedDictionary自动对密钥进行排序。