Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/vb.net/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
将字符串拆分为字典VB.net_Vb.net_String_Dictionary_Split - Fatal编程技术网

将字符串拆分为字典VB.net

将字符串拆分为字典VB.net,vb.net,string,dictionary,split,Vb.net,String,Dictionary,Split,这是我的字符串: gamename\jbnightfire\hostname\testserver\hostport\26015 我正试图将这个字符串拆分成一本字典(字符串,字符串)。请注意,此字符串不是静态的,可能包含更多的键和值 词典将包含以下内容: key = gamename, value = jbnightfire key = hostname, value = testserver key = hostport, value = 26015 我尝试过至少5种不同的方法,但似乎都没

这是我的字符串:

gamename\jbnightfire\hostname\testserver\hostport\26015
我正试图将这个字符串拆分成一本字典(字符串,字符串)。请注意,此字符串不是静态的,可能包含更多的键和值

词典将包含以下内容:

key = gamename, value = jbnightfire
key = hostname, value = testserver
key = hostport, value = 26015

我尝试过至少5种不同的方法,但似乎都没有成功。它应该非常简单,但就我的生活而言,我无法让它工作。任何帮助都将不胜感激。谢谢。

拆分字符串并以2步循环,一次前进2项。这意味着键将位于索引
i
,而
i+1
将是值

Dim input = "gamename\jbnightfire\hostname\testserver\hostport\26015"
Dim split = input.Split(New String() { "\" },
                        StringSplitOptions.RemoveEmptyEntries)
Dim dict As New Dictionary(Of String, String)

For i As Integer = 0 To split.Length - 1 Step 2
    dict.Add(split(i), split(i + 1))
Next
请注意,上述方法使用
Add
方法,如果存在重复的键,该方法将引发异常。如果您不希望重复,请使用上述方法

或者,您可以将该值直接指定给键,在这种情况下,如果键存在,它将覆盖任何现有值:

dict(split(i)) = split(i + 1)
另一个选项是使用
ContainsKey
并跳过它(如果存在),或者执行一些附加逻辑来确定是跳过它还是保留它。例如,如果它已经存在,则将跳过它:

For i As Integer = 0 To split.Length - 1 Step 2
    If dict.ContainsKey(split(i)) Then Continue For
    dict.Add(split(i), split(i + 1))
Next

你能在这里发布你尝试过的方法中的至少一种吗?每次尝试后,我都会删除代码,最后我想出了一个有效的解决方案,它可能不是最好的解决方案,但它确实有效。Dim stringtosplit as string=“gamename\jbnightfire\hostname\testserver\hostport\26015”Dim dictionary1作为新字典(字符串,字符串)Dim spl=stringtosplit.Split(“\”)Dim temp as string=”“Dim temp2 as string=”“对于i作为整数=0到spl1.Length-1如果temp.Length=0,则temp=spl(i)Else temp2=spl(i)dictionary1.Add(temp,temp2)temp=”“End If next请不要在注释中发布代码。编辑您的问题并将代码张贴在那里。我越想越觉得以下格式是最安全的密钥格式:gamename、gamename\jbnightfire、gamename\jbnightfire\hostname等,这样密钥将是唯一的这是正确的但危险的。您应该检查字典中是否已经有每个值。如果尝试两次添加值,则会出现异常。如果不是dict.containskey(value),那么dict.add(value)@trucker\u jim这是一个很好的观点。OP将需要决定是检查和跳过,如您所示,还是覆盖该值。是的,我越想它,我认为以下格式是最安全的密钥格式:gamename、gamename\jbnightfire、gamename\jbnightfire\hostname等,那样的话,钥匙就会unique@trucker_jim更新了我的帖子以解释可能的重复对我来说非常有用,但我认为这应该是0到split.Length-2,这样如果由于某种原因存在奇数个参数,它就会跳过最后一个值。