莫尔斯到文本词典 - System.ArgumentException:已添加具有相同键的项目
本文关键字:添加 项目 ArgumentException 文本 System | 更新日期: 2023-09-27 18:35:05
正在创建程序将莫尔斯电码转换为文本和文本转换为莫尔斯电码。首先,它与字典中的基本查拉塞特一起工作:abcdefghijklmnoprstuvzy0123456789。比我想升级它以翻译我语言中的特殊字符,例如 ščťžýáíéôä?!:;。-_() .问题是当我把它写到我的字典中并给每个字符键时,它会抛出我 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:如果我没有发布足够的代码,就问我应该添加什么
此项目导致问题:
ň=--.--
在添加密钥之前,应包含一个条件来验证字典中是否已存在该键:
if (!morzeovka.ContainsKey(key))
{
morzeovka.Add(key, value);
}
这对
我有用:
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=-----
.=.-.-.-
,=--..--
?=..--..
!=--..-
;=-.-.-.
:=---...
(=--...
)=-.--.-
""""=.-..-.
-=-....-
_=..--.-
@=.--.-.
+=.-.-.
/=-..-.
'=.----.
á=.--.-
ä=.-.-
é=..-..
ö=---.
ü=..--
ň=--.--";
}
要了解字典来源的问题,您可以添加简单的检查:
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);
}
它将输出到控制台,重复词典满足。