猿问

C# - 比较 2 个列表与自定义元素

我有 2 个列表。一个包含搜索元素,一个包含数据。我需要循环 list2 中的每个元素,其中包含 list1 中的任何字符串(“cat”或“dog”)。举些例子:


List<string> list1 = new List<string>();

list1.Add("Cat");

list1.Add("Dog");

list1.Add... ~1000 items;


List<string> list2 = new List<string>();

list2.Add("Gray Cat");

list2.Add("Black Cat");

list2.Add("Green Duck");

list2.Add("White Horse");

list2.Add("Yellow Dog Tasmania");

list2.Add("White Horse");

list2.Add... ~million items;

我的期望是listResult: {"Gray Cat", "Black Cat", "Yellow Dog Tasmania"}(因为它在 list1 中包含“cat”和“dog”)。除了嵌套循环,您是否有任何想法让序列运行得更快?


我目前的解决方案如下。但是......似乎太慢了:


foreach (string str1 in list1)

{

   foreach (string str2 in list2)

   {

      if str2.Contains(str1)

      {

         listResult.Add(str2);

      }

   }

}


弑天下
浏览 192回答 3
3回答

幕布斯7119047

包含将使用“天真的方法”进行字符串搜索。您可以通过研究字符串搜索算法来改进这一点。一种方法是为所有搜索词创建一个通用的后缀树。然后遍历 list2 中的所有项目以查看它们是否匹配。不过,这可能有点矫枉过正。您可以先尝试 fubo 提出的一些简单优化,看看这对您来说是否足够快。
随时随地看视频慕课网APP
我要回答