【问题标题】:Splitting a string into a dictionary VB.net将字符串拆分为字典 VB.net
【发布时间】:2014-05-27 02:49:31
【问题描述】:

这是我的字符串:

gamename\jbnightfire\hostname\testserver\hostport\26015

我正在尝试将此字符串拆分为字典(字符串,字符串)。请注意,这个字符串不是静态的,可以包含更多的键和值。

字典将包含以下内容:

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

我已经尝试了至少 5 种不同的方法,但似乎都无法奏效。它应该非常简单,但是对于我的生活,我无法让它发挥作用。任何帮助将不胜感激。谢谢。

【问题讨论】:

  • 您可以在这里发布您尝试过的至少一种方法吗?
  • 每次尝试后我都删除了代码
  • 我终于想出了一个可行的解决方案,它可能不是最好的解决方案,但它确实有效。 Dim stringtosplit as string = "gamename\jbnightfire\hostname\testserver\hostport\26015" Dim dictionary1 as New Dictionary(Of String, String) Dim spl = stringtosplit.Split("\") Dim temp As String = "" Dim temp2 As String = "" For i As Integer = 0 To spl1.Length - 1 If temp.Length = 0 Then temp = spl(i) Else temp2 = spl(i) dictionary1.Add(temp, temp2) temp = "" End If下一个
  • 请不要在评论中发布代码。编辑您的问题并在那里发布代码。
  • 我想得越多,我认为以下格式是最安全的键值:游戏名、游戏名\jbnightfire、游戏名\jbnightfire\主机名等,这样键将是唯一的

标签: vb.net string dictionary split


【解决方案1】:

拆分字符串并以 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

【讨论】:

  • 这个正确但危险。您应该检查每个值是否已经在字典中。如果您尝试两次添加一个值,您将遇到异常。如果不是 dict.containskey(value) 那么 dict.add(value)
  • @trucker_jim 说得好。 OP 将需要决定是检查和跳过,如您所示,还是覆盖该值。
  • 是的,我想得越多,我认为以下格式是最安全的键位:游戏名、游戏名\jbnightfire、游戏名\jbnightfire\主机名等,这样键将是唯一的
  • @trucker_jim 更新了我的帖子以考虑可能的重复
  • 主要对我有用,但我认为这应该是 0 到拆分。长度 - 2 - 这样如果由于某种原因有奇数个参数,它会跳过最后一个值。
猜你喜欢
  • 1970-01-01
  • 2016-03-13
  • 1970-01-01
  • 1970-01-01
  • 2014-06-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多