Dictionary set value with dynamic keys
Hello all,
Currently I'm saving my json values locally in a Dictionary. I want to write a function that takes in an array of keys, and a value, and saves it to the root Dictionary. It's easy to do this if we know the amount of keys, but in my case, I don't. For example:
// Setting a value with three keys
public void SetValue(T value, string key1, string key2, string key3)
{
((m_saveData[key1] as Dictionary<string, object>)[key2] as Dictionary<string, object>)[key3] = value;
}
// Setting a value with four keys
public void SetValue(T value, string key1, string key2, string key3, string key4)
{
(((m_saveData[key1] as Dictionary<string, object>)[key2] as Dictionary<string, object>)[key3] as Dictionary<string, object>)[key4] = value;
}
// Setting a value with x keys
public void SetValue(T value, params string[] keys)
{
// How do?
}
Has anyone done something like this before, or know how one would do it?
Answer by JVene · Sep 15, 2018 at 11:20 PM
Under the hood, a Dictionary is implemented as a hash table, so the problem isn't about the keys, it is about the hash code. The simplest means I can think of would be to create 1 string key, but concatenate the variable number of sub-keys prior to insertion, possibly with a separator character between the keys so you can parse them apart.
An alternative is to create a struct or class for which you provide a hash function suitable for the Dictionary, which computes the hash based on whatever list of strings the object happens to have.
Your answer
![](https://koobas.hobune.stream/wayback/20220612174659im_/https://answers.unity.com/themes/thub/images/avi.jpg)
Follow this Question
Related Questions
Nested dictionary serialization 0 Answers
Getting KeyNotFoundException and I can't understand why 1 Answer
How to use result.ResultDictionary to fetch full json of facebook user profile who logged in my app? 1 Answer
How to pass value transform.rotation to another player (Multiplayer/Node.js) 0 Answers