C# 在c语言中添加到字典的问题#
好的,所以我努力寻找,但我似乎找不到我的问题的答案。我的代码中一定有问题,如果有人能帮我看一下,那将非常有帮助C# 在c语言中添加到字典的问题#,c#,winforms,arrays,dictionary,C#,Winforms,Arrays,Dictionary,好的,所以我努力寻找,但我似乎找不到我的问题的答案。我的代码中一定有问题,如果有人能帮我看一下,那将非常有帮助 Dictionary<string, string> keylist = new Dictionary<string, string>(); if (intext.Contains("addkey") && intext.Contains("def")) { stri
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).");
//////////////////////////////
}
Dictionary keylist=new Dictionary();
if(intext.Contains(“addkey”)&intext.Contains(“def”))
{
字符串[]关键字=intext.Split(“”);
字符串key1=关键字[1];
字符串def2=关键字[3];
字符串fkey=key1.Replace(““,”);
字符串fdef=def2.Replace(“”,“”);
keylist.Add(fkey,fdef);
说(“短语“+fkey+””加上响应“+fdef+””);
说(“你的字典包含”+keylist.Count.ToString()+“单词”);
//////////////////////////////
}
我只想让它以“addkey_here def definition_here”的形式接受输入,并将其添加到字典中。我添加计数部分是为了调试,它总是说,无论我添加了多少个单词,字典中只有一个单词。你可能知道我是新来的,所以请温柔一点。谢谢字典键列表=新字典();
Dictionary<string, string> keylist = new Dictionary<string, string>();
我假设每当用户输入某种命令时(例如,从命令行,当他们单击按钮等),就会调用此函数。如果是这种情况,则需要将键列表
字典置于更高级别(例如,作为实例变量)。按照现在的代码方式,每次调用函数时,都会创建一个新的字典并向其中添加密钥;这就是为什么只有一个
冒着错误判断或过分简化问题的风险,将我上面引用的行移到函数体之外应该会有所帮助。在给定的代码中,您每次运行字典时都要重新创建字典
Dictionary<string, string> keylist = new Dictionary<string, string>();
Dictionary keylist=new Dictionary();
将变量keylist重新初始化为空字典
相反,尝试将该行移到函数之外。由于您使用的是winforms,因此可以创建类级变量,如下所示:
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).");
}
}
}
公共部分类表单1:表单
{
字典键列表=新字典();
公共表格1()
{
初始化组件();
}
公共函数(字符串intext)
{
if(intext.Contains(“addkey”)&intext.Contains(“def”))
{
字符串[]关键字=intext.Split(“”);
字符串key1=关键字[1];
字符串def2=关键字[3];
字符串fkey=key1.Replace(““,”);
字符串fdef=def2.Replace(“”,“”);
keylist.Add(fkey,fdef);
说(“短语“+fkey+””加上响应“+fdef+””);
说(“你的字典包含”+keylist.Count.ToString()+“单词”);
}
}
}
您需要循环通过if(intext.Contains…{}
块,或者它只运行一次。如果您循环通过它并且在字典中只得到一个条目,这是因为您在场景中不断在范围内重新分配它,例如:
while(true) {
Dictionary<string, string> keylist = new Dictionary<string,string>();
//...
}
while(true){
字典键列表=新字典();
//...
}
因此,如果是您的情况,您需要将其移到外部。我不确定您的输入字符串是什么,或者您需要如何使用它,尽管我认为您希望拆分输入字符串并沿着这条线循环
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;
}
专用字典GetData(字符串intext)
{
字典键列表=新字典();
字符串[]关键字=intext.Split(“”);
foreach(关键字中的字符串s)
{
如果(s.Contains(“addkey”)&s.Contains(“def”))
{
字符串fkey=key1.Replace(““,”);
字符串fdef=def2.Replace(“”,“”);
keylist.Add(fkey,fdef);
说(“短语“+fkey+””加上响应“+fdef+””);
说(“你的字典包含”+keylist.Count.ToString()+“单词”);
}
}
返回键列表;
}
您的字典中只有一个元素,因为您的代码只运行过一次。据我所知,您只向一个新字典添加了一对,我只希望它包含一项。也许最好解释一下您试图实现的目标,使用字典时可能会遇到一些您可能没有意识到的问题。谢谢是你,它工作得很好。这一定是回答问题的记录时间。我不敢相信我没有看到。@oakley:很高兴它对你有用!如果这解决了你的问题,请不要忘记将其标记为已接受的答案,以便其他有类似问题的人能够轻松找到解决方案。