在字典中操纵值

时间:2014-07-08 17:36:36

标签: c# list class dictionary

所以我有一个字典,其索引是一个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,...

我希望能够为读入的任意数量的文件添加术语,并最终通过再次浏览字典(在单独的方法中)并将值列表中的每个术语除以数量来获取它们的平均值读入的文件。这可能吗?感谢您的任何建议,我是一名新手程序员,对您的任何帮助表示赞赏。

2 个答案:

答案 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];
}

鉴于两个列表具有相同的长度和数据类型。

您可以通过字典的键获取自定义对象,然后使用其列表执行任何操作。您需要跟踪单独读取的文件数。