2013-04-16 80 views
3

嵌套的「foreach」的數量是否有最佳做法?最佳實踐:嵌套forEach

這就是我在複雜詞典中嵌套的「foreach」,是否有一點開始產生「可能」阻礙性能的開銷?這是值得考慮的嗎?

爲了使其具體而不是主觀: 我有3複雜的字典,看起來像這樣;

Dictionary<int, Dictionary<string, XObject>() 
Dictionary<string, List<YObject>() 
Dictionary<string, Dictionary<string, List<ZObjects>() 
現在

顯然,作爲予過濾這些詞典(在foreach),以產生我正在尋找數據,我的代碼的結構朝向5嵌套「的foreach」標題除去外1.在回答這些都是我擔心可能會受到影響的區域:

  1. 性能(太多的上下文切換)
  2. 內存(保留在內存中所有數據集中在一個給定時刻)
  3. 可維護性(壞的程序員!)

最佳實踐或不要緊?

+3

有了這種結構,可以考慮創建一些自定義類來更好地封裝和描述數據。 – Oded

+0

@Oded我認爲問題仍然是一樣的。它只會更具可讀性 – WiiMaxx

回答

4
  1. 對於foreach語句沒有「上下文切換」。
  2. 內存:相當無關,內存採取的是數據不枚舉(通過的foreach語句中使用)
  3. Maintanability:考慮重構你的代碼添加方法物品進行
3

清晰和簡明的方式來實現這將在功能上將它們分開。考慮:

// represents outer loop 
IEnumerable<KeyValuePair<string, string>> Operation1(IEnumerable<KeyValuePair<string, string>> input) 
{ 
    // outer loop processing 
    IEnumerable<KeyValuePair<string, string>> output = Operation2(input); 
    return output; 
} 

// which feeds in to... 

IEnumerable<KeyValuePair<string, string>> Operation2(IEnumerable<KeyValuePair<string, string>> input) 
{ 
    // work on it 
    IEnumerable<KeyValuePair<string, string>> output = Operation3(input); 
    return output; 
} 

// and finally 

IEnumerable<KeyValuePair<string, string>> Operation3(IEnumerable<KeyValuePair<string, string>> input) 
{ 
    // work on it 
    return input; 
} 

這可以保持循環的功能分開,順序可以改變,每一個都是謹慎的工作單元。