3

ユーザー名で検索してコンピューター名を取得できるように、関連付けたい 2 つの文字列があります。文字列: ユーザー名 computername

私は VB コードにあまり詳しくないので、このオブジェクトの作成方法がわかりません。これは私が必要だと思うものです:

(
  ("user1" "computer1")
  ("user2" "computer2")
  ("user3" "computer3")
  ("user4" "computer4")
  ("user5" "computer5")
)

次に、「user3」に関連付けられているコンピューター名は何ですか? 結果として「computer3」を取得します。

4

5 に答える 5

4

を探していますSystem.Collections.Generic.Dictionary。具体的にはDictionary(Of String, String).

Add項目を 1 つずつ:

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存在しないキーを検索する可能性があるかどうかを調べることをお勧めします。

于 2013-10-23T14:39:38.090 に答える
1

1 台のコンピューターが複数のユーザーによって使用される可能性があり、複数のユーザーが特定のコンピューターを使用する可能性があると思います。その場合、ユーザーをコンピュータに関連付ける情報を保持するクラスを持つ方がおそらく簡単になるでしょう。次に、そのクラスのインスタンスのリストを作成して、一連の情報全体を保持できます。リストであるため、次のように 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

これを書いている間に答えが見えなかったSethに+1を編集してください。

編集 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
于 2013-10-23T20:58:01.220 に答える
0
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")
于 2013-10-23T14:41:52.360 に答える
0

あなたが欲しいのは次のとおりだと思いますDictionary(Of String, String)

Dim x as New Dictionary(Of String, String)
x.Add("user1", "computer1") ' etc...

Dim computer as String = x("user1")
于 2013-10-23T14:40:10.907 に答える