[英]Best way to associate two strings of text in VB.NET
我有两个字符串,我想要关联在一起,以便我可以通过用户名搜索并获得计算机名称。 字符串:用户名computername
我不是那么流利的VB代码,所以我不知道如何构建这个对象。 这就是我认为我需要的:
(
("user1" "computer1")
("user2" "computer2")
("user3" "computer3")
("user4" "computer4")
("user5" "computer5")
)
然后我希望能够通过询问查询列表:什么计算机名与“user3”相关联? 并获得“computer3”作为结果。
您正在寻找System.Collections.Generic.Dictionary
。 特别是一个Dictionary(Of String, String)
。
Add
一个项目:
Dim computers As New Dictionary(Of String, String)
computers.Add("user1", "computer1")
computers.Add("user2", "computer2")
'...
或者,您可以使用初始化程序并一举完成:
Dim computers As New Dictionary(Of String, String) From
{
{"user1" "computer1"},
{"user2" "computer2"},
{"user3" "computer3"},
{"user4" "computer4"},
{"user5" "computer5"}
}
并使用索引器访问单个元素:
Dim result As String = computers("user3")
请注意,如果集合中不存在“user3”,则会抛出异常。 如果有可能搜索不存在的密钥,您可能希望查看TryGetValue
。
虽然使用字典的答案肯定会有效,但我个人更喜欢使用类和列表。
你会做这样的事情:
Public Class UserComputer
Private _user As String
Public Property User() As String
Get
Return _user
End Get
Set(ByVal value As String)
_user = value
End Set
End Property
Private _comp As String
Public Property Computer() As String
Get
Return _comp
End Get
Set(ByVal value As String)
_comp = value
End Set
End Property
Public Sub New(User As String, Computer As String)
Me.User = User
Me.Computer = Computer
End Sub
End Class
Public Sub Main()
Dim myList As New List(Of UserComputer)
myList.Add(New UserComputer("user1", "computer1")
'... keep adding objects
End Sub
这里的优点是,如果需要,可以很容易地扩展您的类UserComputer
; 只需在课程中添加更多属性即可。 它还可以让您轻松地使用程序其他部分中对象中的信息。
我想有一台计算机可能被多个用户使用,并且多个用户可以使用特定的计算机。 在这种情况下,拥有一个包含用户与计算机相关信息的类可能会更简单。 然后,您可以创建该类的实例列表来保存整个信息集,并且作为List,您可以使用LINQ轻松查询它,如下所示:
Option Infer On
Module Module1
Dim computerUsers As New List(Of ComputerUser)
Class ComputerUser
Property ComputerName As String
Property UserName As String
End Class
Sub CreateTestData()
computerUsers = New List(Of ComputerUser)
computerUsers.Add(New ComputerUser With {.ComputerName = "PC1", .UserName = "Fred"})
computerUsers.Add(New ComputerUser With {.ComputerName = "PC2", .UserName = "Jim"})
computerUsers.Add(New ComputerUser With {.ComputerName = "PC3", .UserName = "Jane"})
computerUsers.Add(New ComputerUser With {.ComputerName = "PC1", .UserName = "Jim"})
End Sub
Sub Main()
CreateTestData()
Dim pcName = "PC1"
Dim thisPcUsers = computerUsers.Where(Function(x) x.ComputerName = pcName).Select(Function(y) y.UserName).ToList()
Console.WriteLine(pcName & " is used by: " & String.Join(", ", thisPcUsers))
Dim user = "Jim"
Dim thisUserPCs = computerUsers.Where(Function(x) x.UserName = user).Select(Function(y) y.ComputerName).ToList()
Console.WriteLine(user & " uses computers: " & String.Join(", ", thisUserPCs))
Console.ReadLine()
End Sub
End Module
哪个输出
PC1 is used by: Fred, Jim
Jim uses computers: PC2, PC1
编辑 +1给Seth,我在写这篇文章时没有看到他的回答。
编辑2您可以通过各种方式使用LINQ,例如,以获取名称以“J *”开头的用户:
Dim partialName = "J*"
Dim usersWithWildcard = computerUsers.Where(Function(x) x.UserName Like partialName).ToList()
Console.WriteLine("Users starting with " & partialName)
For Each u In usersWithWildcard
Console.WriteLine(u.UserName)
Next
我怀疑你想要的是一个Dictionary(Of String, String)
:
Dim x as New Dictionary(Of String, String)
x.Add("user1", "computer1") ' etc...
Dim computer as String = x("user1")
Dim userComputers As New Dictionary(Of String, String) From
{
{"user1" "computer1"},
{"user2" "computer2"},
{"user3" "computer3"},
{"user4" "computer4"},
{"user5" "computer5"}
}
Dim computer As String = userComputers("user3")
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.