所以我有一个字典,其索引是一个int,其值是一个包含双精度列表的类,该类是这样构建的:
public class MyClass
{
public List<double> MyList = new List<double>();
}
并且字典就是这样构建的:
public static Dictionary<int, MyClass> MyDictionary = new Dictionary<int, MyClass>();
我通过逐行读取文件填充字典,并将文件片段添加到splitstring中,其中有已知数量的部分(100),然后将字符串片段添加到列表中,最后进入字典。这是什么样的:
public void DictionaryFiller()
{
string LineFromFile;
string[] splitstring;
int LineNumber = 0;
StreamReader sr = sr.ReadLine();
while (!sr.EndOfStream)
{
LineFromFile = sr.ReadLine();
splitstring = LineFromFile.Split(',');
MyClass newClass = new MyClass();
for (int i = 1; i < 100; i++)
{
newClass.MyList.Add(Convert.ToDouble(splitstring[i]));
}
MyDictionary.Add(LineNumber, MyClass);
LineNumber++;
}
}
我的问题是:我是否要再读取另一个文件并再次开始使用DictionaryFiller方法,我是否可以为列表中的每个值添加术语。我的意思是,说文件的第一行以10,23,15开头,......现在,当我读到第二个文件时,让我们说它的第一行以10,13,18开头, ......我期待发生的事情是字典在其值列表中有前3个双打(索引为0)然后变为20,36,33,...
我希望能够为读入的任意数量的文件添加术语,并最终通过再次浏览字典(在单独的方法中)并将值列表中的每个术语除以数量来获取它们的平均值读入的文件。这可能吗?感谢您的任何建议,我是一名新手程序员,对您的任何帮助表示赞赏。
答案 0 :(得分:1)
只需替换
newClass.MyList.Add(Convert.ToDouble(splitstring[i]))
带
newClass.MyList.Add(Convert.ToDouble(splitstring[i]) + MyDictionary[LineNumber].GetListOfDouble()[i])
然后替换
MyDictionary.add(Linenumber, Myclass)
与
MyDictionary[linenumber] = MyClass
在添加之前,确保MyDictionary [LineNumber]不为空:)
这样的事情会起作用
If(MyDictionary[LineNumber] == null)
{
MyDictionnary.add(LIneNUmber, new List<double>());
}
If(MyDictionary[LineNUmber][i] == null)
{
return 0;
}
我的解决方案不关心列表大小,而是在读取时间而不是之后完成,这应该比遍历词典两次更有效。
答案 1 :(得分:0)
var current = MyDictionary[key];
for(int i = 0; i < current.MyList.Length; i++)
{
current.MyList[i] = current.MyList[i] + newData[i];
}
鉴于两个列表具有相同的长度和数据类型。
您可以通过字典的键获取自定义对象,然后使用其列表执行任何操作。您需要跟踪单独读取的文件数。