2015-10-08 62 views
0

我有一個linq對象說「僱員」。創建字典顯示特定國家的僱員人數

我想抓住員工列表中每個員工的居住狀態,並創建一個字典(鍵,值)。其中鍵是列表中存在的狀態,值是它在列表中出現的次數。

到目前爲止: -

foreach(var elem in Employees) 
      { 
       var stateDictionary = new Dictionary<string, object>(); 
       stateDictionary["State"] = elem.State; 

       Console.Write(stateDictionary["State"]); 
      } 

這隻會保存國家的名字最後一次每個ELEM從員工閱讀。

我該如何着手解決我的目標?

最終結果應該允許我說: -

MN - 5 CA - 2 OR - 33 WA - 21

等......每個州和員工從數州。

+0

沒有你意味着將stateDictionary的聲明放在您的foreach之外?現在,您爲每個元素創建一個新的Dictionary並將其丟棄。 –

回答

2

最簡單的方法是使用LINQ。下面的語句將創建國家爲重點的字典,和值每個州的員工數:

Employees.GroupBy(e => e.State).ToDictionary(g => g.Key.State, g => g.Count()); 

如果你想保持必要的做法,這將工作:

var stateDictionary = new Dictionary<string, int>(); 
foreach (var e in Employees) 
{ 
    if (!stateDictionary.ContainsKey(e.State)) stateDictionary.Add(e.State, 1); 
    else stateDictionary[e.State]++; 
} 
+0

你應該解釋一下它的功能和工作原理。如果他在理解簡單的'foreach'循環時遇到困難,他會很難理解這一點。 –

+0

我明白lambda微積分。我也沒有與Foreach的問題..我從來沒有用過字典...... – Philo

+0

@DaveZych我剛剛編輯的答案添加一個工作'foreach'。我也添加了「ToDictionary」的解釋。 –