Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/261.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 使用Linq比较2列表中的字符串_C#_Linq_List - Fatal编程技术网

C# 使用Linq比较2列表中的字符串

C# 使用Linq比较2列表中的字符串,c#,linq,list,C#,Linq,List,我需要将列表与字符串进行比较,并找到相似的whitch元素。即 List<string> listA = {"ProfileHeight", "ProfileWidth", "WebThickness"} List<string> listB ={"ProfileHeightVisibility", "ProfileWidthVisibility", "WebThicknessVisibility", "FlangeThicknessVisibility", "Depth

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

List<string> listA = {"ProfileHeight", "ProfileWidth", "WebThickness"}
List<string> listB ={"ProfileHeightVisibility", "ProfileWidthVisibility", "WebThicknessVisibility", "FlangeThicknessVisibility", "DepthVisibility"}
List listA={“ProfileHeight”、“ProfileWidth”、“WebThickness”}
列表B={“ProfileHeightVisibility”、“ProfileWidthVisibility”、“WebThicknesVisibility”、“FlangeHicknessVisibility”、“DepthVisibility”}

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

您的意思是希望列表B中的项目
,其中
包含列表A中的任何元素

listB.Where(b => listA.Any(a => b.Contains(a))
您可以在LINQ中执行此操作:

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

请记住,此算法的运行时开销与O(n^2)类似,因此,随着列表中元素数量的增加,它将迅速降低运行速度。

是的,您可以使用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();
    }
公共列表GetSimilarString(列表1、列表2)
{
返回(从列表1中的项到列表2中的项2,其中string.Equals(item,item2,StringComparison.InvariantCultureIgnoreCase)选择项)。ToList();
}

您还可以实现以下功能:

  public class EqualityComparer : IEqualityComparer<string>
  {

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

    public int GetHashCode(string obj)
    {
      return 1;
    }
   }
List listA=新列表{“zinmin”、“zin1”、“zin2”};
List listB=新列表{“zinmin”、“min1”、“min2”};
列表匹配=listA.Intersect(listB.ToList();

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

和“相似”“您的意思是
StartsWith
Contains
?为什么使用
字符串。比较
?这个方法返回一个整数,表示两个字符串的词法顺序,而不是布尔值,不是吗?是的,很好。我更正了我的答案。通过“=”比较字符串可能会导致单词的区域性、编码或大小写敏感度出现问题。这个例子展示了如何处理这些事情。我不确定字符串是否应该相等。然而,我可能更愿意使用
string.Equals(a,b,stringcomparison.InvariantCultureIgnoreCase)
你是对的,使用string.Equals可能更好。
 listB.Intersect(listA, new EqualityComparer()).ToList();
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();