如何计算嵌套字典中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岁。
这将为您获取年龄为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将嵌套字典平展。