在类型结构的链表中查找元素 (VB.NET)
Finding Element in a Linked List of Type Structure (VB.NET)
我已经声明了一个结构:
Public Structure MyStructure
Public name As String
Public dataType As String
Public address As String
End Structure
然后是链表:
Private MyList As New LinkedList(Of MyStructure)
给定结构中元素的值,在列表中查找元素的最佳方法是什么。比如我想在列表中找到字段名称为"readings"的MyStruct实例,应该怎么做呢?有没有办法避免循环遍历链表元素?
您最好使用 class 而不是结构:
Public Class MyFoo
Public Property name As String
Public Property dataType As String
Public Property address As String
End Class
这允许以下内容:
Dim lst As New LinkedList(Of MyFoo)
lst.AddFirst(New MyFoo With {.name = "Ziggy", .address = "here", .dataType = "foo"})
lst.AddFirst(New MyFoo With {.name = "Zoey", .address = "there", .dataType = "bar"})
lst.AddFirst(New MyFoo With {.name = "Curly", .address = "nowhere", .dataType = "any"})
Dim item = lst.FirstOrDefault(Function(x) x.name = "Ziggy")
If item IsNot Nothing Then
' do something
End If
确实没有办法避免循环 - 某些地方必须迭代集合才能找到 "Ziggy"(或 "readings");在这里,我们只是不需要为它编写代码。
如果找不到该项目,FirstOrDefault
将 return Nothing
。由于 Structure 是一种值类型,因此它永远不可能是 Nothing
(尽管它可以 包含 Nothing
)。结果,行 If item IsNot Nothing
导致语法错误。
我想对于结构,您可以使用 String.IsNullOrEmpty
来测试名称是否已填写,但我只会使用 class.
我已经声明了一个结构:
Public Structure MyStructure
Public name As String
Public dataType As String
Public address As String
End Structure
然后是链表:
Private MyList As New LinkedList(Of MyStructure)
给定结构中元素的值,在列表中查找元素的最佳方法是什么。比如我想在列表中找到字段名称为"readings"的MyStruct实例,应该怎么做呢?有没有办法避免循环遍历链表元素?
您最好使用 class 而不是结构:
Public Class MyFoo
Public Property name As String
Public Property dataType As String
Public Property address As String
End Class
这允许以下内容:
Dim lst As New LinkedList(Of MyFoo)
lst.AddFirst(New MyFoo With {.name = "Ziggy", .address = "here", .dataType = "foo"})
lst.AddFirst(New MyFoo With {.name = "Zoey", .address = "there", .dataType = "bar"})
lst.AddFirst(New MyFoo With {.name = "Curly", .address = "nowhere", .dataType = "any"})
Dim item = lst.FirstOrDefault(Function(x) x.name = "Ziggy")
If item IsNot Nothing Then
' do something
End If
确实没有办法避免循环 - 某些地方必须迭代集合才能找到 "Ziggy"(或 "readings");在这里,我们只是不需要为它编写代码。
如果找不到该项目,FirstOrDefault
将 return Nothing
。由于 Structure 是一种值类型,因此它永远不可能是 Nothing
(尽管它可以 包含 Nothing
)。结果,行 If item IsNot Nothing
导致语法错误。
我想对于结构,您可以使用 String.IsNullOrEmpty
来测试名称是否已填写,但我只会使用 class.