Mronzer
Mronzer

Reputation: 449

Cumulatively add values to Dictionary

I am trying to add values to a dictionary as they get determined based on certain conditions. The app has to loop through each line and once a certain condition has been met then a value must be added to the dictionary. Here is the code that is task with looping through the lines and determine values to be added.

  foreach (var line in this.FileLines)
    {
        count++;

        string[] bits = line.Split(',');
        fineNumber = bits[0].Trim();
        int length = bits.Length;
        if (length == 9)
        {
            //other processing gets done here, code not included as its of no interest for this question
        }
        else
        {
            //AddErrorFinesToFile(line, fineNumber);
            AddFinesToDictonary(fineNumber, line);
            continue;
        }
    }

Then below is the actual method signature and its code, in this method I am simply trying to add values to the dictionary as they come.

public Dictionary<string, string> AddFinesToDictonary(string fineNumber, string errorLine)
    {
        Dictionary<string, string> erroredLines = new Dictionary<string, string>();
        erroredLines.Add(fineNumber, errorLine);
        return erroredLines;
    }

The only problem that seems to arise here is, only the latest value gets added to the dictionary, meaning the previous added value gets overwritten.

Upvotes: 0

Views: 108

Answers (3)

Hameed Syed
Hameed Syed

Reputation: 4275

Make erroredLines as global scope.

Dictionary<string, string> erroredLines = new Dictionary<string, string>();

foreach (var line in this.FileLines)
    {
        count++;

        string[] bits = line.Split(',');
        fineNumber = bits[0].Trim();
        int length = bits.Length;
        if (length == 9)
        {
            //other processing gets done here, code not included as its of no interest for this question
        }
        else
        {
            //AddErrorFinesToFile(line, fineNumber);
            AddFinesToDictonary(fineNumber, line);
            continue;
        }
    }




public void AddFinesToDictonary(string fineNumber, string errorLine)
    {
               erroredLines.Add(fineNumber, errorLine);
       // return erroredLines;
    }

And also no need to return erroredLines dictionary.

Upvotes: 2

armnotstrong
armnotstrong

Reputation: 9065

The reason is every time you add data to the Directory you create a new one instead of adding data to the exists one

There are two choices you could make:

  1. make a Dictionary out of the function
  2. pass the Dictionary as an out ref to the function

@Hameed Syed 's answer has already given the first one (option 1).

Here is how you could pass the Dictionary as a ref parameter (out) to the function (option 2):

public void AddFinesToDictonary(out Dictionary<string,string>dict, string fineNumber, string errorLine)
{
    dict.Add(fineNumber, errorLine);          
}

Upvotes: 0

pisi1001
pisi1001

Reputation: 89

What about this;

 Dictionary<string, string> erroredLines = new Dictionary<string, string>();

    foreach (var line in this.FileLines)
        {
            count++;

            string[] bits = line.Split(',');
            fineNumber = bits[0].Trim();
            int length = bits.Length;
            if (length == 9)
            {
                //other processing gets done here, code not included as its of no interest for this question
            }
            else
            {

                erroredLines.Add(fineNumber, line);
                continue;
            }
        }

after foreach you can use erroredLines dictionary.

Upvotes: 1

Related Questions