2016-11-07 42 views
1

我有一本字典尋找如何計算嵌套字典int值的出現在C#

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

在我的代碼,它會自動生成新的與一組特定的鍵+值的「人」(鍵)。第一個「字符串」是名稱,在嵌套字典中,您有像「年齡」,「身高」,「性別」等字符串,並帶有一個int值。

例如:約翰年齡:20,身高:180,性別:0(0代表男性)。

在我的情況下,我想計算特定字符串的特定int值發生多少次。例如:我在字典中有100個人(鍵),我想知道有多少人的確切「年齡」爲43.

我試過使用.Count。例如:personStats.Count(),但當然它計數的第一個字符串(更不用說它沒有考慮到我想提供一個特定的int值)。我也試過使用foreach,但我不知道如何輸入嵌套字典來查找字符串「

編輯:我如何生成新鍵的示例。參數(personname,statType,value)來自其他methodes。

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)。所以最後我就結了(?)John帶有3個附加字符串+值:age = 20,heigh = 180,gender = 0所以想象一下,我跑了100次,得到了100個隨機年齡不同的名字,我想要數一下有多少人年齡43.

+0

你能舉幾個例子數據的例子嗎?用一些樣本值生成一個,以及你期望的。 – FrankerZ

+0

嗨。我會嘗試(因爲我試圖學習,所以我的代碼很混亂)。 –

回答

1

這應該取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 
+0

謝謝!這只是完美的 - 而且。有效!我會研究你的理想版本。但我必須採取一切步驟,因爲我仍然是一個neewbie。 –

0

東西,你可以使用LINQ來算這樣的:

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

使用SelectMany這個變平的嵌套字典。