如何计算c#中嵌套字典中int值的出现次数

时间:2016-11-07 11:50:26

标签: c# dictionary nested

我有一本字典

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岁。

2 个答案:

答案 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展平您的嵌套词典。