【问题标题】:What will be the linq query for below code?下面代码的 linq 查询是什么?
【发布时间】:2021-01-04 14:50:43
【问题描述】:
class Program
{
    public static bool Like(string toSearch,string toFind)
    {
        if (toSearch.Contains(toFind))
            return true;
        else
            return false;
    }
    static void Main(string[] args)
    {
        List<string> str = new List<string>();
        List<string> strNew = new List<string>();

        str.Add("abdecacd");
        str.Add("facdgh");
        str.Add("iabcacdjk");
        str.Add("lmn");
        str.Add("opqe");
        str.Add("acbd");
        str.Add("efgh");

        string strToSearch= "acd,abc,abcacd,al";

        string[] desc = strToSearch.Split(',');

        for(int i = 0; i < str.Count; i++)
        {
            for(int j = 0; j < desc.Length; j++)
            {
                if(Like(str[i].ToString(),desc[j].ToString()))
                {
                    strNew.Add(str[i].ToString());
                    break;
                }
            }
        }

        if(strNew != null)
        {
            foreach(string strPrint in strNew)
            {
                Console.WriteLine(strPrint);
            }
        }
    }
}

如何为上述代码编写一个 linq 查询,在这个 strToSearch 变量值将是动态的,用户将输入逗号分隔值,用户可以输入任意数量的逗号分隔值,我想编写一个 linq 查询,它将查找 List 中包含用户输入的值的所有值。 我需要 linq 查询的原因,因为我的应用程序中使用了 linq。请帮我解决这个问题。

【问题讨论】:

  • 这里有个bugstrNew总是不为空
  • ToString() 在字符串上是无操作的
  • 不要做if (pred) return true; else return false;return pred;

标签: c# linq linq-to-sql linq-to-entities


【解决方案1】:

LINQ 表达式为:

List<string> strNew = str.Where(x => desc.Any(y => x.Contains(y))).ToList();

甚至可以简化为:

List<string> strNew = str.Where(x => desc.Any(x.Contains)).ToList();

通过删除中间 lambda 函数。

一般而言,您所写的内容与我所写的内容之间没有“速度”差异。两个表达式都是 O(m*n),其中 m = str.Length 和 n = desc.Length,所以 O(x^2)。您没有进行精确搜索,因此您不能使用创建HashSet&lt;string&gt; 的常用技巧(或在内部执行相同操作的str.Intersect(desc).ToList())。

【讨论】:

  • 我建议保留 Like 方法,因为它允许更改搜索的含义(例如,更改为 Damerau-Levenshtein 距离度量)。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-02-07
  • 1970-01-01
  • 1970-01-01
  • 2018-12-30
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多