使用LINQ搜索两个匹配列表,并为每个项返回布尔值

Wat*_*rap 1 c# linq

我试图检查两个列表,例如看起来像这样

list1 = {"br","je"}; 
list2 = {"banana", "bread", "jam", "brisket", "flakes", "jelly"};
Run Code Online (Sandbox Code Playgroud)

应该回来

{false, true, false, true, false, true}
Run Code Online (Sandbox Code Playgroud)

使用LINQ可以实现上述输出.我尝试过像这样的东西

    public static IEnumerable<bool> ContainsValues(List<string> list1, List<string> list2)
{
    List<bool> res = new List<bool>();

    foreach (string item in list1)
    {
        foreach (string sub in list2)
        {
            res.Add(item.ToLower().Contains(sub.ToLower()));
        }
    }

    return res;
}
Run Code Online (Sandbox Code Playgroud)

Ruf*_*s L 8

是的,您可以在一个语句中重写现有代码:

public static IEnumerable<bool> ContainsValues(List<string> list1, List<string> list2)
{
    return
        from item in list1
        from sub in list2
        select item.ToLower().Contains(sub.ToLower());
}
Run Code Online (Sandbox Code Playgroud)

但是,您现有的代码不提供所需的示例结果.为了得到你想要的结果,我想你想要这样的东西:

public static IEnumerable<bool> SecondContainsFirst(List<string> first, 
    List<string> second)
{
    return second.Select(s => first.Any(f => 
        s.IndexOf(f, StringComparison.OrdinalIgnoreCase)) > -1);
}
Run Code Online (Sandbox Code Playgroud)

以下是示例用法:

private static void Main()
{
    var list1 = new List<string> {"br", "je"};
    var list2 = new List<string> {"banana", "bread", "jam", "brisket", "flakes", "jelly"};
    var result = SecondContainsFirst(list1, list2);

    Console.WriteLine($"{{{string.Join(", ", result)}}}");

    Console.Write("\nDone!\nPress any key to exit...");
    Console.ReadKey();
}
Run Code Online (Sandbox Code Playgroud)

产量

在此输入图像描述