【问题标题】:Parsing string logic issue c#解析字符串逻辑问题c#
【发布时间】:2013-11-16 13:27:48
【问题描述】:

This is a follow on from this question

我的程序正在接收一个由两部分组成的字符串:一个距离值和一个 ID 号。我已经将它们分开并将它们存储在我的程序内的局部变量中。所有的 id 号码都存储在字典中,用于检查传入的距离值。虽然我应该注意到从设备发送到我的程序中的每个字符串都是通过单个字符串传递的。下次我的程序从设备接收到该信号时,它会覆盖之前的数据。

如果进入我的程序的 id 键与我的字典中的一个匹配,那么我的字典键旁边的一个变量应该被更新。但是,当我运行我的程序时,我没有得到 6 个不同的值,我只得到相同的值并且它们都同时更新。

这是我编写的所有代码:

    Dictionary<string, string> myDictonary = new Dictionary<string, string>();
string Value1 = "";
string Value2 = "";
string Value3 = "";
string Value4 = "";
string Value5 = "";
string Value6 = "";

void Start() 
{

    myDictonary.Add("11111111", Value1);
    myDictonary.Add("22222222", Value2);
    myDictonary.Add("33333333", Value3);
    myDictonary.Add("44444444", Value4);
    myDictonary.Add("55555555", Value5);
    myDictonary.Add("66666666", Value6);

}

private void AppendString(string message) 
{   
    testMessage = message;

    string[] messages = message.Split(',');

    foreach(string w in messages)
    {   
        if(!message.StartsWith(" "))
            outputContent.text +=  w + "\n";

    }

    messageCount = "RSSI number " + messages[0];
    uuidString = "UUID number " + messages[1];



    if(myDictonary.ContainsKey(messages[1]))
    {
        Value1 = messageCount;
        Value2 = messageCount;
        Value3 = messageCount;
        Value4 = messageCount;
        Value5 = messageCount;
        Value6 = messageCount;
    }
}

我怎样才能得到它,以便当程序接收到第一个密钥(例如 1111111)时,它只更新 Value1?

通过的信息可能是动态的,所以我想尽可能避免硬性化信息。

【问题讨论】:

  • 在你的foreach() 里面你真的要检查!message吗?

标签: c# string dictionary


【解决方案1】:

代替

if(myDictonary.ContainsKey(messages[1]))
{
  Value1 = messageCount;
  Value2 = messageCount;
  Value3 = messageCount;
  Value4 = messageCount;
  Value5 = messageCount;
  Value6 = messageCount;
}

使用

if(myDictonary.ContainsKey(messages[1]))
{
  myDictonary[messages[1]] = messageCount;
}

这样,您只能使用键 messages[1] 而不是全部更新字典条目。

【讨论】:

  • 请注意,如果message[1] 不是字典中的键,这将创建一个新的键值对。与我猜的 OP 期望的不太一样。
  • @Kaf 在他的代码示例中,他检查密钥是否存在。我只是建议他应该更改 if 语句的内容。我添加了该检查以更清楚。
  • 感谢代码,但是我已经输出了我的字符串以查看它们是否更新并且不再更新。我将第二行更改为 messages[0] 作为我需要传递到字典中的 messageCount 变量。你知道为什么会这样吗?
  • @N0xus 也将条件更改为 messages[0]。 if(myDictonary.ContainsKey(messages[0]))
  • @ovidi 但在消息的拆分中,message[1] 是字符串的关键部分。所以这是我需要对照我的字典键检查的部分(以及你如何向我展示如何实现),现在我需要获取值 messageCount 并将其放在与每个键关联的值旁边。因此,将 if 语句更改为 messages[0] 将不起作用,因为这不是包含我正在检查的键值的部分。还是您建议我添加第二个 if 语句?
【解决方案2】:
if(myDictonary.ContainsKey(messages[1]))
{
    Value1 = messageCount;
    Value2 = messageCount;
    Value3 = messageCount;
    Value4 = messageCount;
    Value5 = messageCount;
    Value6 = messageCount;
}

应该是

if(myDictonary.ContainsKey(messages[1]))
    {
        myDictionary[messages[1]] = messageCount;
    }

【讨论】:

  • 如果一个 id 不在字典中并且您不想为其添加新条目,这将是要走的路线
猜你喜欢
  • 2017-01-16
  • 1970-01-01
  • 1970-01-01
  • 2021-12-21
  • 1970-01-01
  • 2012-07-11
  • 1970-01-01
  • 1970-01-01
  • 2013-02-18
相关资源
最近更新 更多