2

我需要将列表与字符串进行比较,并找到相似的元素。IE。

List<string> listA = {"ProfileHeight", "ProfileWidth", "WebThickness"}
List<string> listB ={"ProfileHeightVisibility", "ProfileWidthVisibility", "WebThicknessVisibility", "FlangeThicknessVisibility", "DepthVisibility"}

我想知道是否可以使用 Linq。我希望结果是一个列表,其中包含 ListB 中的元素,其名称类似于 listA 中的字符串。其中声明即“ProfileHeightVisibility.Contains("ProfileHeight") = true

4

5 回答 5

18

你的意思是你想要listB中的项目,where它包含listAany中的元素?

listB.Where(b => listA.Any(a => b.Contains(a))
于 2013-07-30T08:10:36.047 回答
5

您可以在 LINQ 中执行此操作:

listB.Where(e => listA.Any(a => e.Contains(a)));

请记住,此算法的运行时成本类似于O(n^2),因此随着列表中元素数量的增加,它会迅速变慢。

于 2013-07-30T08:10:55.860 回答
1

你也可以实现这样的事情:

  public class EqualityComparer : IEqualityComparer<string>
  {

    public bool Equals(string x, string y)
    {
      return y.Contains(x);
    }

    public int GetHashCode(string obj)
    {
      return 1;
    }
   }

然后像这样使用相交:

 listB.Intersect(listA, new EqualityComparer()).ToList();
于 2013-07-30T08:20:34.747 回答
0

是的,你可以用 LINQ 做这样的事情

    public List<string> GetSimilarStrings(List<string> list1, List<string> list2)
    {
        return (from item in list1 from item2 in list2 where string.Equals(item,item2,StringComparison.InvariantCultureIgnoreCase) select item).ToList();
    }
于 2013-07-30T08:13:12.883 回答
0
List<string> listA = new List<string> { "zinmin", "zin1", "zin2" };
List<string> listB = new List<string> { "zinmin", "min1", "min2" };



List<string> matching = listA.Intersect(listB).ToList();

匹配结果将出现 {"zinmin"} 。排序顺序无关紧要。

于 2018-10-10T10:04:12.517 回答