嵌套“foreach”的数量是否有最佳实践?
那就是我在复杂字典中嵌套“foreach”,是否有一点它开始产生“可能”阻碍性能的开销?这是否值得考虑。
使其具体而不是主观: 我有3个复杂词典,看起来像这样;
Dictionary<int, Dictionary<string, XObject>()
Dictionary<string, List<YObject>()
Dictionary<string, Dictionary<string, List<ZObjects>()
显然现在,当我过滤这些词典(在foreach中)时,为了生成我正在寻找的数据,我的代码的结构朝向5嵌套“foreach”排除外部1。在回答这些是我担心的地方可能会受到影响:
最佳做法还是无所谓?
答案 0 :(得分:4)
答案 1 :(得分: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;
}
这样可以使循环的功能分离,顺序可以改变,每个循环都是一个谨慎的工作单元。