Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/321.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 加入两个列表<;T>;带foreach循环_C#_Foreach - Fatal编程技术网

C# 加入两个列表<;T>;带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

我正在尝试稍微远离LINQ,它被证明总体上非常有用,但有时也很难阅读

我曾经使用LINQ执行连接(完全外部连接),但为了简单起见,我更喜欢使用for/foreach循环。我刚刚将一条LINQ语句(不是PLINQ)转换成嵌套的foreach循环,性能受到了严重的影响。过去需要几秒钟的时间现在大约需要一分钟,请参见下面的代码

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
    }
    ....