I am starting to do a little development in C#, and I am stuck with a problem here. Usually I develop in Python where stuff like this is being implemented easily (at least f
You could use dictionary initializes. Not as elegant as Python, but could live with:
var persons = new Dictionary>
{
{ "alfred", new Dictionary { { "age", 20.0 }, { "height_cm", 180.1 } } },
{ "barbara", new Dictionary { { "age", 18.5 }, { "height_cm", 167.3 } } },
{ "chris", new Dictionary { { "age", 39.0 }, { "height_cm", 179.0 } } }
};
And then:
persons["alfred"]["age"];
Also notice that you need Dictionary
for this structure and not Dictionary
.
Also working with such structure could be a little PITA and harm readability and compile-time type safety of the code.
In .NET it is preferred to work with strongly typed objects, like this:
public class Person
{
public double Age { get; set; }
public string Name { get; set; }
public double HeightCm { get; set; }
}
and then:
var persons = new[]
{
new Person { Name = "alfred", Age = 20.0, HeightCm = 180.1 },
new Person { Name = "barbara", Age = 18.5, HeightCm = 180.1 },
new Person { Name = "chris", Age = 39.0, HeightCm = 179.0 },
};
and then you could use LINQ to fetch whatever information you need:
double barbarasAge =
(from p in persons
where p.Name == "barbara"
select p.Age).First();
To be noted of course that using collections would not be as fast as a hashtable lookup but depending on your needs in terms of performance you could also live with that.