繁体   English   中英

在VB.NET中关联两个文本字符串的最佳方法

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM