C# 加入两个列表<;T>;带foreach循环
我正在尝试稍微远离LINQ,它被证明总体上非常有用,但有时也很难阅读 我曾经使用LINQ执行连接(完全外部连接),但为了简单起见,我更喜欢使用for/foreach循环。我刚刚将一条LINQ语句(不是PLINQ)转换成嵌套的foreach循环,性能受到了严重的影响。过去需要几秒钟的时间现在大约需要一分钟,请参见下面的代码C# 加入两个列表<;T>;带foreach循环,c#,foreach,C#,Foreach,我正在尝试稍微远离LINQ,它被证明总体上非常有用,但有时也很难阅读 我曾经使用LINQ执行连接(完全外部连接),但为了简单起见,我更喜欢使用for/foreach循环。我刚刚将一条LINQ语句(不是PLINQ)转换成嵌套的foreach循环,性能受到了严重的影响。过去需要几秒钟的时间现在大约需要一分钟,请参见下面的代码 foreach (var p in PortfolioELT) { double meanloss; double expvalue; double s
foreach (var p in PortfolioELT)
{
double meanloss;
double expvalue;
double stddevc;
double stddevi;
bool matched = false;
foreach (var a in AccountELT)
{
if (a.eventid == p.eventid)
{ DO SOME MATH HERE <-----
foreach(PortfolioELT中的var p)
{
双平均损失;
双出口值;
双stddevc;
双标准差;
布尔匹配=假;
foreach(会计英语中的var a)
{
if(a.eventid==p.eventid)
{在这里做一些数学运算你每次迭代都在创建局部变量,这些变量可能会被使用,也可能永远不会被使用
double meanloss;
double expvalue;
double stddevc;
double stddevi;
bool matched = false;
您正在对匹配的事件id进行线性搜索,如果列表中只有1个按“eventid”排序,则可以使用二进制搜索,而不是浪费整个线性搜索的精力
foreach (var a in AccountELT)
{
if (a.eventid == p.eventid)
为什么这比LINQ Join和
我故意不回答这个问题
我怎样才能加快速度
您正在为每个PortfolioELT
循环整个AccountELT
集合。您应该循环一个集合,并将另一个集合转换为字典,以便更轻松地查找特定的记录。例如:
var accountELTIdx = AccountELT.ToDictionary(k => k.eventid);
然后
请提供完整的概念示例…如果您将其转换为LINQ,这将提高性能;)我个人认为性能高于可读性。然后,我确实从汇编程序开始。您能举一个例子说明LINQ在哪些方面难以阅读吗?我发现LINQ最大的优点之一是结构正确时的可读性。您呢只使用方法语法?这比LINQ更可读吗?LINQ的等价物是什么?非常简单的答案。谢谢你,先生。
foreach (var a in AccountELT)
{
if (a.eventid == p.eventid)
var accountELTIdx = AccountELT.ToDictionary(k => k.eventid);
foreach (var p in PortfolioELT)
{
double meanloss;
double expvalue;
double stddevc;
double stddevi;
bool matched = false;
if(accountELTIdx.ContainsKey(p.eventid)
{
var acct = accountELTIdx[p.eventid];
// some maths
}
....