为什么这个字典不保存数据 - C#
本文关键字:数据 保存 字典 为什么 | 更新日期: 2023-09-27 18:30:38
我有一个文本文件的日期,形成变量nameSplit
.下面的代码正在检查从文本文件到 nameSplit 的字符串以前是否已保存到字典中。如果是这样,那么它打印"Hoozah!",否则它将数据添加到数组并打印"失败"。但是,如果我在文本文件中输入名称"Jim"5 次,它只会输出"失败",尽管它应该在第二个条目中输出"hoozah!我不确定出了什么问题!
while (!sR.EndOfStream)
{
string line = sR.ReadLine();
string split = line.Split('$', ',')[1];
string nameSplit = line.Split('.', ':')[1];
Dictionary<string, decimal> names = new Dictionary<string, decimal>();
// inside the loop
decimal n = Convert.ToDecimal(split);
if (names.ContainsKey(nameSplit))
{
names[nameSplit] += n;
names.Add(nameSplit, n);
Console.WriteLine("Hoozah!");
}
else
{
names.Add(nameSplit, n);
Console.WriteLine("Failure");
}
} sR.Close();
GC.Collect();
Thread.Sleep(66);
数据:
- 吉姆: $22.00, 2. 吉姆: $2100.00, 3. 吉姆: $6.00, 4. 吉姆: $32.00,
- 5. 吉姆: $2.00,
在循环之外定义字典。 现在你只是在每个循环上创建一个新字典,基本上忘记了前一个循环的结果。
Dictionary<string, decimal> names = new Dictionary<string, decimal>();
while (!sR.EndOfStream)
{
...
}
编辑
根据您的数据,您实际上需要拆分每行上的"条目"并循环访问它们。 假设有多个行具有类似的格式,您需要执行以下操作。
Dictionary<string, decimal> names = new Dictionary<string, decimal>();
while (!sR.EndOfStream)
{
string line = sR.ReadLine();
var entries = line.Split(new []{','}, StringSplitOptions.RemoveEmptyEntries);
foreach(var entry in entries)
{
decimal amount = decimal.Parse(entry.Split('$')[1]);
string nameSplit = entry.Split('.', ':')[1].Trim();
if (names.ContainsKey(nameSplit))
{
names[nameSplit] += amount;
Console.WriteLine("Hoozah!");
}
else
{
names.Add(nameSplit, amount);
Console.WriteLine("Failure");
}
}
}
请注意,我重命名了一些变量并从名称中删除了空格,但主要是拆分逗号并迭代每个"条目"。 我不确定你为什么要保留美元金额的运行总和,但你可以在循环后使用这些金额。