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

本文关键字:int 字典 何计算 计算 嵌套 | 更新日期: 2023-09-27 18:16:35

我有一个字典查找

Dictionary<string, Dictionary<string, int>> personStats

在我的代码中,它自动生成具有特定键+值集的新"person"(键)。第一个"字符串"是名字,在嵌套的字典中,你有像"年龄"、"身高"、"性别"这样的字符串,并附带一个int-value。

示例: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;
}

所以参数可以是(John, age, 20), (John, height, 180)和(John, gender, 0)。所以最后我将以条目(?)结束。约翰与3附加字符串+值:年龄=20,身高=180,性别=0。假设我运行了100次,得到了100个随机年龄的名字,我想计算一下有多少人的年龄是43岁。

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

这将为您获取年龄为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

你可以使用Linq来计算:

var NumberPersonsAged43 =  personStats.SelectMany(p => p.Value["age"] == 43).Count();

使用SelectMany将嵌套字典平展。