我有一本字典
Dictionary<string, Dictionary<string, int>> personStats
在我的代码中,它会自动生成带有一组特定键+值的新“人物”(键)。第一个“字符串”是名称,在嵌套字典中,您有“age”,“height”,“gender”等带有附加int值的字符串。
示例:John年龄:20岁,身高:180,性别:0(男性为0)。
在我的情况下,我想计算特定字符串上特定int值的出现次数。示例:我在字典中有100个人(键),我想知道有多少人的确切“年龄”为43岁。
我尝试过使用.Count
。示例:personStats.Count()
,但当然它计算第一个字符串(更不用说它没有考虑到我想要使用特定的int值)。我也试过foreach,但我不知道如何输入嵌套字典来找到字符串“
编辑:我如何生成新密钥的示例。参数(personname,statType,value)来自其他方法。
public void SetPersonStats(string personname, string statType, int value)
{
if (personStats.ContainsKey(personname) == false)
{
personStats[personname] = new Dictionary<string, int>();
}
personStats[personname][statType] = value;
}
因此参数可以是(约翰,年龄,20)和(约翰,身高,180)和(约翰,性别,0)。所以最后我会得到条目(?)约翰,附加3个字符串+值:年龄= 20,高度= 180,性别= 0。所以想象一下我跑了100次并且随机年龄有100个不同的名字,我想算一下有多少人有43岁。
答案 0 :(得分:2)
这应该会向您提取年龄为42岁的用户数量:
personStats.Count(c => c.Value["age"] == 42);
理想情况下,您应该使用课程来定义此人。像
这样的东西enum Gender
{
Male,
Female
}
class PersonStats
{
int Age;
int Height;
Gender Gender;
}
//Add to the dictionary
var dict = Dictionary<string, PersonStats>();
dict.Add("FrankerZ", new PersonStats{
Age = 28,
Height = 180,
Gender = Gender.Male
});
//Some example filters:
dict.Count(person => person.Age == 28); //1
dict.Count(person => person.Gender == Gender.Male); //1
答案 1 :(得分:0)
您可以使用Linq来计算:
var NumberPersonsAged43 = personStats.SelectMany(p => p.Value["age"] == 43).Count();
这会使用SelectMany展平您的嵌套词典。