正在创建将莫尔斯电码转换为文本和文本到莫尔斯电码的程序。首先,它与字典中的基本字符串工作得很好:abcdefghijklmnoprstuvzy0123456789。我想升级它以翻译我的语言中的特殊字符,如ščťžýáíéôä?!:;。-_()。问题是当我把它写到我的字典并给每个字符时key它会抛出我的excpetion:System.ArgumentException:已经添加了一个具有相同键的项目。
这是我的阅读词典代码
private void ReadDictionary(string filename)
{
string cesta = Path.GetDirectoryName(Process.GetCurrentProcess().MainModule.FileName);
try {
string[] lines = File.ReadAllLines(filename);
if (lines != null) {
}
foreach (string line in lines)
{
string[] znaky = line.Split('=');
string key = znaky[0];
string value = znaky[1];
this.morzeovka.Add(key, value);
this.latinka.Add(value, key);
}
}
catch (IOException) {
MessageBox.Show("Nepodarilo sa nacitat slovnik"+ Environment.NewLine + "Skontrolujete umiestnenie slovníka v: "+cesta,"Chyba",MessageBoxButtons.OK,MessageBoxIcon.Error);
System.Environment.Exit(1);
}
}
}
这是我的字典
a=.-
b=-...
c=-.-.
d=-..
e=.
f=..-.
g=--.
h=....
i=..
j=.---
k=-.-
l=.-..
m=--
n=-.
o=---
p=.--.
q=--.-
r=.-.
s=...
t=-
u=..-
v=...-
w=.--
x=-..-
y=-.--
z=--..
1=.----
2=..---
3=...--
4=....-
5=.....
6=-....
7=--...
8=---..
9=----.
0=-----
.=.-.-.-
,=--..--
?=..--..
!=--..-
;=-.-.-.
:=---...
(=--...
)=-.--.-
""=.-..-.
-=-....-
_=..--.-
@=.--.-.
+=.-.-.
/=-..-.
'=.----.
á=.--.-
ä=.-.-
é=..-..
ö=---.
ü=..--
ň=--.--
这是完整的例外
System.ArgumentException: An item with the same key has already been added.
at System.ThrowHelper.ThrowArgumentException(ExceptionResource resource)
at System.Collections.Generic.Dictionary`2.Insert(TKey key, TValue value, Boolean add)
at System.Collections.Generic.Dictionary`2.Add(TKey key, TValue value)
感谢您的帮助,
PS:如果我没有发布enought代码,请问我应该添加什么
答案 0 :(得分:1)
此项目导致问题:
N = --.--
在添加密钥之前,您应该包含一个条件来验证密钥是否已经存在于字典中:
if (!morzeovka.ContainsKey(key))
{
morzeovka.Add(key, value);
}
答案 1 :(得分:1)
这对我有用:
7
& (
具有相同的代码--...
class Program
{
static void Main(string[] args)
{
var pairsEnum =
pairs
.Split(new string[] { Environment.NewLine }, StringSplitOptions.RemoveEmptyEntries)
.Select(x => x.Split('='))
.Select(x => new { Key = x[0].Trim(), Code = x[1].Trim() });
var multipleKeys =
pairsEnum
.GroupBy(x => x.Key, (key, codes) => new { Key = key, Codes = codes })
.Where(x => x.Codes.Count() > 1)
.Select(x => new { Key = x.Key, Codes = x.Codes })
.ToList();
var multipleCodes =
pairsEnum
.GroupBy(x => x.Code, (code, keys) => new { Code = code, Keys = keys })
.Where(x => x.Keys.Count() > 1)
.Select(x => new { Keys = x.Keys, Code = x.Code})
.ToList();
var dic1 =
pairsEnum
.ToDictionary(x => x.Key, x => x.Code);
// This will throw the same exception as in your example.
var dic2 =
pairsEnum
.ToDictionary(x => x.Code, x => x.Key);
}
private static string pairs =
@"
a=.-
b=-...
c=-.-.
d=-..
e=.
f=..-.
g=--.
h=....
i=..
j=.---
k=-.-
l=.-..
m=--
n=-.
o=---
p=.--.
q=--.-
r=.-.
s=...
t=-
u=..-
v=...-
w=.--
x=-..-
y=-.--
z=--..
1=.----
2=..---
3=...--
4=....-
5=.....
6=-....
7=--...
8=---..
9=----.
0=-----
.=.-.-.-
,=--..--
?=..--..
!=--..-
;=-.-.-.
:=---...
(=--...
)=-.--.-
""""=.-..-.
-=-....-
_=..--.-
@=.--.-.
+=.-.-.
/=-..-.
'=.----.
á=.--.-
ä=.-.-
é=..-..
ö=---.
ü=..--
ň=--.--";
}
答案 2 :(得分:0)
要了解您的词典来源有什么问题,您可以添加简单的检查:
if (!morzeovka.ContainsKey(key))
{
morzeovka.Add(key, value);
}
else
{
Console.WriteLine("morzeovka duplicate: {0}", key);
}
if (!latinka.ContainsKey(value))
{
latinka.Add(value, key);
}
else
{
Console.WriteLine("latinka duplicate: {0}", value);
}
它将输出到控制台,复制字典相遇。