使用linq和lambda表达式简化传统的foreach嵌套循环

Mag*_*agB 4 c# linq lambda nested-loops

(参见下面的代码片段)我想找到与coll2的项目匹配的coll1的所有项目(coll2的项目数<= coll1的项目数),并将查询结果放在coll3中.如何使用linq和lambda表达式实现它?当然,我可以简单地将coll2复制到coll3 :-)但这不是我的目标.我想知道使用linq和lambda来代替这种传统逻辑结构的方法.先感谢您.

        var coll1 = new List<int>() { 1, 2, 3, 4, 5 };
        var coll2 = new List<int>() { 2, 4 };
        var coll3 = new List<int>();
        foreach ( var selected in coll2 )
        {
            foreach ( var item in coll1 )
            {
                if ( selected == item )
                {
                    coll3.Add(item);
                }
            }
        }
Run Code Online (Sandbox Code Playgroud)

Ani*_*dha 14

您可以使用Intersect

coll1.Intersect(coll2);
Run Code Online (Sandbox Code Playgroud)

但这不会按预期工作(参见King King的评论)..你可以改为做到这一点

coll2.Where(x=>coll1.Any(y=>x==y));
Run Code Online (Sandbox Code Playgroud)

  • 这将不会按预期工作:如果`col2 = {1,2,3,4}`,`col1 = {2,2,4}`.这将返回`{2,4}`,而结果应为`{2,2,4}`? (2认同)

And*_*rei 6

coll3 = coll1.Where(i => coll2.Contains(i)).ToList();
Run Code Online (Sandbox Code Playgroud)

更新.如评论中所建议的那样简单一点:

coll3 = coll1.Where(coll2.Contains).ToList();
Run Code Online (Sandbox Code Playgroud)