我有一个日期进入文本文件,形成变量nameSplit
。以下代码检查以查看来自文本文件到nameSplit的字符串之前是否已保存到字典中。如果是这样,那么它打印“Hoozah!”,否则它将数据添加到数组并打印“Failure”。但是,如果我在文本文件中输入名称“Jim”5次,它只输出“Failure”,虽然它应该在第二个条目输出“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);
DATA:
答案 0 :(得分:7)
在循环外定义字典。现在你只是在每个循环上创建一个新的字典,基本上忘记了前一个循环的结果。
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");
}
}
}
请注意,我重命名了一些变量并从名称中修剪了空格,但主要是分割逗号并迭代每个“条目”。我不确定为什么要保留美元金额的总和,但你可以在循环后使用它们。