簡體   English   中英

在 c# 中添加到字典時出現問題

[英]Problem adding to dictionary in c#

好吧,所以我看起來很努力,但我似乎無法找到我的問題的答案。 我的代碼中一定有問題,如果有人可以幫我看一下,那將非常有幫助。

       Dictionary<string, string> keylist = new Dictionary<string, string>();
            if (intext.Contains("addkey") && intext.Contains("def"))
        {

            string[] keywords = intext.Split(' ');
            string key1 = keywords[1];
            string def2 = keywords[3];
            string fkey = key1.Replace("_", " ");
            string fdef = def2.Replace("_", " ");
            keylist.Add(fkey, fdef);
            say("Phrase '" + fkey + "' added with response '" + fdef + "'");
            say("Your Dictionary contains " + keylist.Count.ToString() + " word(s).");
            //////////////////////////////



        }

我想要它做的就是以“addkey key_here def definition_here”的形式輸入並將其添加到字典中。 我添加了計數部分以用於調試目的,它總是說我在字典中只有 1 個單詞,無論我添加了多少。 你可能會說我是新人,所以請溫柔一點。 謝謝

Dictionary<string, string> keylist = new Dictionary<string, string>();

我假設只要用戶輸入某種命令(例如,從命令行,當他們單擊按鈕等),就會調用這個 function。 如果是這種情況,您需要將鍵keylist字典置於更高級別(例如,作為實例變量)。 現在的代碼方式是,每次調用 function 時都會創建一個新字典並將密鑰添加到其中; 這就是為什么只有一個。

冒着誤判或過度簡化您的問題的風險,只需將我上面引用的行移到 function 主體之外應該會有所幫助。

在給定的代碼中,您每次運行時都在重新創建字典。

Dictionary<string, string> keylist = new Dictionary<string, string>();

將變量 keylist 重新初始化為空字典。

而是嘗試將該行移到 function 之外。 由於您使用的是 winforms,因此您可以創建一個 class 級別變量,如下所示:

public partial class Form1 : Form
{
    Dictionary<string, string> keylist = new Dictionary<string, string>();       

    public Form1()
    {
        InitializeComponent();
    }

    public void YourFunction(string intext)
    {
        if (intext.Contains("addkey") && intext.Contains("def"))        
        {            
            string[] keywords = intext.Split(' ');            
            string key1 = keywords[1];            
            string def2 = keywords[3];            
            string fkey = key1.Replace("_", " ");            
            string fdef = def2.Replace("_", " ");            
            keylist.Add(fkey, fdef);            
            say("Phrase '" + fkey + "' added with response '" + fdef + "'");            
            say("Your Dictionary contains " + keylist.Count.ToString() + " word(s)."); 
        }
    }

}

您需要遍歷if (intext.Contains...{}塊,否則它只運行一次。如果您循環遍歷它並且只在 Dictionary 中獲得一個條目,那是因為您在某個場景中不斷在 scope 中重新分配它如:

while(true) {
    Dictionary<string, string> keylist = new Dictionary<string,string>();
    //...
}

所以你需要把它移到外面,如果你是這樣的話。

我不確定您的輸入字符串是什么或您需要如何使用它,但我認為您正在尋找拆分輸入字符串並沿着這條線循環......

private Dictionary<string, string> GetData(string intext)
{
    Dictionary<string, string> keylist = new Dictionary<string, string>();

    string[] keywords = intext.Split(' ');
    foreach (string s in keywords)
    {
        if (s.Contains("addkey") && s.Contains("def"))
        {
            string fkey = key1.Replace("_", " ");
            string fdef = def2.Replace("_", " ");

            keylist.Add(fkey, fdef);
            say("Phrase '" + fkey + "' added with response '" + fdef + "'");
            say("Your Dictionary contains " + keylist.Count.ToString() + " word(s).");
        }
    }

    return keylist;
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM