linq 如何< int>在C#中使用另一个List搜索< int>List

mkshixfv  于 2022-12-06  发布在  C#
关注(0)|答案(4)|浏览(266)

我有下面列出的名单。

List<List<int>> paths = new List<List<int>>();
paths.Add(new List<int>() { 0,1 });
paths.Add(new List<int>() { 0, 2 });
paths.Add(new List<int>() { 0, 4 });
paths.Add(new List<int>() { 1, 2 });
paths.Add(new List<int>() { 0, 3 });

我还有另一个像这样的int列表

List<int> ends = new List<int>(){3,4};

现在,我需要过滤路径中内部列表中的任何数字包含末端列表中的任何数字的记录,对于本例,这些记录将是以下记录。

{0,3}
{0,4}

我试过这种方法

paths.Where(x => x.Where(y => ends.Contains(y))).ToList();
b1payxdu

b1payxdu1#

paths.Where(x => x.Any(z => ends.Contains(z)))
8e2ybdfx

8e2ybdfx2#

使用Any解决您的问题:

var res = paths.Where(list => list.Any(item => ends.Any(end => end==item))).ToList();

或更短

var res = paths.Where(list => list.Any(item => ends.Contains(item))).ToList();

结果:

bqucvtff

bqucvtff3#

LINQ语法将是一种表达方式:

var matches = (from p in paths
               from e in ends
               where p.Contains(e)
               select p).Distinct();
iyfjxgzm

iyfjxgzm4#

class Program
{
    private static void Main(string[] args)
    {
        var paths = new List<List<int>>
        {
            new List<int>() { 0, 1 },
            new List<int>() { 0, 2 },
            new List<int>() { 0, 4 },
            new List<int>() { 1, 2 },
            new List<int>() { 0, 3 }
        };

        var ends = new List<int>(){3,4};
        var results = paths.Where(x => ends.Any(x.Contains));
        
        // display results
        foreach(var result in results)
            Console.WriteLine(JsonSerializer.Serialize(result));
    }
}

//[0,4]
//[0,3]

相关问题