我需要以某种方式将所有整数从一个输入键加到下一个键。
我可以感觉到你在 Linq 代码中对此没有什么困惑,所以这里是更简单的代码。
假设你的字典是Dictionary<string, int> dateNumDict
您可以创建如下所示的方法
int GetSumOfIntBetweenTwoDateString(Dictionary<string, int> dateNumDict, string startKey, string endKey)
{
int sum = 0;
if (dateNumDict.ContainsKey(startKey) && dateNumDict.ContainsKey(endKey))
{
List<string> keys = dateNumDict.Keys.ToList();
int startIndex = keys.IndexOf(startKey);
int endIndex = keys.IndexOf(endKey);
for(int i = startIndex; i <= endIndex; i++)
{
sum += dateNumDict[keys[i]];
}
}
return sum;
}
此方法将接受您的字典,将开始键和结束键作为输入,并将开始键值与结束键值之间的所有整数相加,并返回结果总和。
这还将检查字典中是否存在源或目标键并相应地执行任务。
调用这个方法会是,
int sum = GetSumOfIntBetweenTwoDateString(dateNumDict, sourceDateKey, destDateKey);
由于传递字典是passing by reference,因此您无需担心从此方法获取更新的(输出)字典。
注意如果您的要求是添加关键日期时间在开始时间和结束时间之间的所有数据,您必须注意字典中数据的顺序。
例如
字典有像
这样的值
dateNumDict.Add("5/27/2018 12:19:11 PM", 1);
dateNumDict.Add("5/27/2018 12:29:11 PM", 2);
dateNumDict.Add("5/27/2018 12:25:11 PM", 3);
如果您在“5/27/2018 12:19:11 PM”到“5/27/2018 12:25:11 PM”之间添加数据,它会将所有三个值相加,依次为这些日期之间的三个条目。
另外,我怎样才能把这本词典保存到计算机中,以便在我打开程序时加载同一个词典
为此,您可以使用serialization 的概念(序列化数据有多种方式,但这里我们将使用二进制序列化)
您可以使用以下方法,
void SaveDict(Dictionary<string, int> dateNumerDict)
{
try
{
BinaryFormatter binaryFormatter = new BinaryFormatter();
using (Stream dataStream = new FileStream("Data.dat", FileMode.Create))
{
binaryFormatter.Serialize(dataStream, dateNumerDict);
}
}
catch (Exception ex) { /*log exception if you want*/ }
}
此SaveDict 方法将接受您的字典作为输入并将其保存到名为“Data.dat”的文件中。
请注意,您需要在文件顶部添加using System.Runtime.Serialization.Formatters.Binary; 以使用BinaryFormatter 和using System.IO; 以使用File 和Stream 相关类。
这个方法的调用很简单,
SaveDict(dateNumDict);
另一种方法,读取数据如下所示
Dictionary<string, int> LoadDict()
{
Dictionary<string, int> dateNumDict = new Dictionary<string, int>();
if(File.Exists("Data.dat"))
{
try
{
BinaryFormatter binaryFormatter = new BinaryFormatter();
using (FileStream fileStream = new FileStream("Data.dat", FileMode.Open))
{
dateNumDict = (Dictionary<string, int>)binaryFormatter.Deserialize(fileStream) ;
}
}
catch (Exception ex) { /*log exception if you want*/ }
}
return dateNumDict;
}
此方法将查找文件“Data.dat”。如果确实存在,它将反序列化并从中读取Dictionary<string, int> 并返回该字典。
调用这个方法,
dateNumDict = LoadDict();