Home > database >  how to call a dictionary with a string
how to call a dictionary with a string

Time:08-28

I have 4 dictionary, each contain a button's name and the button's value. I Have a List that contain the name of each dictionary

    private Dictionary<string, int> TableArray = new Dictionary<string, int>() { { "ButtonRMT35", 35 }, { "ButtonRMT17", 17 }, { "ButtonRMT11", 11 }, { "ButtonRMT8", 8 }, { "ButtonRMT5", 5 } };
    private Dictionary<string, int> ParArray = new Dictionary<string, int>() { { "ButtonRMP20", 20 }, { "ButtonRMP15", 15 }, { "ButtonRMP10", 10 }, { "ButtonRMP5", 5 } };
    private Dictionary<string, int> MaxChipsRPArray = new Dictionary<string, int>() { { "ButtonRPC20", 20 }, { "ButtonRPC15", 15 }, { "ButtonRPC10", 10 }, { "ButtonRPC5", 5 } };
    private Dictionary<string, int> QuestionSerieRPArray = new Dictionary<string, int>() { { "ButtonRPQ20", 20 }, { "ButtonRPQ15", 15 }, { "ButtonRPQ10", 10 }, { "ButtonRPQ5", 5 } };

    public List<string> DictionaryList = new List<string>() { "TableArray", "ParArray", "MaxChipsRPArray", "QuestionSerieRPArray" };

I would like to do something like that

foreach (var dictionnary in DictionaryList)
        {
            foreach (var buttonName in dictionnary.Keys)
            {
                DoSomething();
            }
        }

Is there a way to do that?

CodePudding user response:

You are on a right track, however it would be hard to achieve by using variable names.

Use nested list, like this: List<Dictionary<string, int>> dictionaryList

Then add your dictionaries to the list, and iterate over them in the for each loop like you initially wanted to.

CodePudding user response:

The List<string> (DictionaryList) contains strings. Those strings are not variable identifiers (variable identifiers are not the same as C#/.NET strings; variable identifiers are lexical tokens in the C# language, being parsed by the C# compiler during the build of your program), and thus cannot be used to refer to some variable.

Rather than maintaining strings in your DictionaryList, let it maintain the dictionaries itself:

private Dictionary<string, int> TableArray = ...
private Dictionary<string, int> ParArray = ...
private Dictionary<string, int> MaxChipsRPArray = ...
private Dictionary<string, int> QuestionSerieRPArray = ...

public List<Dictionary<string, int>> DictionaryList = new List<Dictionary<string, int>>()
{
    TableArray, ParArray, MaxChipsRPArray, QuestionSerieRPArray
};

If you need to access the dictionaries by some name provided as a string (regardless whether that name would correlate with the variable/field names) you can turn the list into a dictionary of dictionaries (mapping some name to each of your dictionaries) instead:

private Dictionary<string, int> TableArray = ...
private Dictionary<string, int> ParArray = ...
private Dictionary<string, int> MaxChipsRPArray = ...
private Dictionary<string, int> QuestionSerieRPArray = ...

public Dictionary<string, <Dictionary<string, int>>> Dictionaries =
    new Dictionary<string, <Dictionary<string, int>>>()
    {
        ["TableArray"] = TableArray,
        ["MaxChipsRPArray"] = MaxChipsRPArray,
        ["QuestionSerieRPArray"] = QuestionSerieRPArray
    };

...

foreach (var dictionary in Dictionaries.Values)
{
    foreach (var buttonName in dictionary.Keys)
    {
        DoSomething();
    }
}

You could then access an individual dictionary by name through the public Dictionaries field like this, for example:

var someDictionaryIWant = Dictionaries["MaxChipsRPArray"];
foreach (var buttonName in someDictionaryIWant.Keys)
{
    DoSomething();
}
  • Related