LINQ Any an array 判断一个数组是否由第一个数组的文本组成

LINQ Any an array to predicate an array whether it consists of the text of the first array

我想检查第一个数组是否与第二个数组项匹配,第二个数组是否有我想要与第一个数组匹配的文本。

这是我正在使用的代码:

public static void Main()
{
    List<string> FirstArrayToLookup = new List<string>();
    List<string> SecondArrayToLookup = new List<string>();
    List<string> ThirdArrayToLookup = new List<string>();
    
    FirstArrayToLookup.Add("FirstArray1");
    FirstArrayToLookup.Add("FirstArray2");
    
    SecondArrayToLookup.Add("SecondArray1");
    
    ThirdArrayToLookup.Add("ThirdArray1");
    ThirdArrayToLookup.Add("ThirdArray2");
    ThirdArrayToLookup.Add("ThirdArray3");
    
    string[] FirstStringContains = { "Array1", "Array2" };
    string[] SecondStringContains = { "Array1" };
    string[] ThirdStringContains = { "Array1", "Array2", "Array3" };
    
    if (FirstArrayToLookup.All(x => FirstStringContains.All(y => x.Contains(y))))
        Console.WriteLine("First Array to Lookup");
    
    if (SecondArrayToLookup.All(x => SecondStringContains.All(y => x.Contains(y))))
        Console.WriteLine("Second Array to Lookup");
    
    if (ThirdArrayToLookup.All(x => ThirdStringContains.All(y => x.Contains(y))))
        Console.WriteLine("Third Array to Lookup");
}

上面的代码只会return Second Array to Lookup,我想要实现的是如果FirstArrayToLookup变量与FirstStringContains变量匹配,那么它应该return First Array to Lookup,其他条件同理。但是只有 Second Array to Lookup 被 return 编辑,而不是 First Array to LookupThird Array to LookupFirstArrayToLookup 必须与 FirstStringContains 匹配,其他的也一样。

.Net fiddle: https://dotnetfiddle.net/rhTMuz

有人知道如何解决这个问题吗?

谢谢

将您的条件重构为

  if (ArrayToLookup.Any(x => JuniorJobPosition.Contains(x)))
  {
    JobPositionText = JobPosition.JuniorPosition.ToString();
  }
  else if (ArrayToLookup.Any(x => SeniorJobPosition.Contains(x)))
  {
    JobPositionText = JobPosition.SeniorPosition.ToString();
  }
  else
  {
    JobPositionText = JobPosition.OtherPosition.ToString();
  }

或者您可以检查

  if (ArrayToLookup.Intersect (JuniorJobPosition). Any())
  {
    JobPositionText = JobPosition.JuniorPosition.ToString();
  }
  else if (ArrayToLookup.Intersect (SeniorJobPosition). Any())
  {
    JobPositionText = JobPosition.SeniorPosition.ToString();
  }
  else
  {
    JobPositionText = JobPosition.OtherPosition.ToString();
  }

第一版

而您的要求:

when ArrayToLookup has all text of Web Junior Developer and Software Junior Developer, it should return JuniorPosition

when the ArrayToLookup has all text of Web Senior Developer and Software Senior Developer

您需要使用 .All()。对于 .Any(),当满足任何条件时,它 return 为真。

While .All() return 当所有条件都满足时为真。

if (ArrayToLookup.All(x => JuniorJobPosition.Contains(x)))
    JobPositionText = JobPosition.JuniorPosition.ToString();

else if (ArrayToLookup.All(x => SeniorJobPosition.Contains(x)))
    JobPositionText = JobPosition.SeniorPosition.ToString();

else
    JobPositionText = JobPosition.OtherPosition.ToString();

if (ArrayToLookup.All(x => JuniorJobPosition.Contains(x)))
    JobPositionText = JobPosition.JuniorPosition.ToString();

if (ArrayToLookup.All(x => SeniorJobPosition.Contains(x)))
    JobPositionText = JobPosition.SeniorPosition.ToString();

if (JobPositionText == JobPosition.None.ToString())
    JobPositionText = JobPosition.OtherPosition.ToString();

Sample Program (1st version)


第二版

您需要检查文本(在第二个数组中)是否包含 ArrayLookup 中的文本。任何满足结果的都将 return 为真。

if (ArrayToLookup.Any(x => JuniorJobPosition.Any(y => x.Contains(y))))
    JobPositionText = JobPosition.JuniorPosition.ToString();
        
if (ArrayToLookup.Any(x => SeniorJobPosition.Any(y => x.Contains(y))))
    JobPositionText = JobPosition.SeniorPosition.ToString();

Sample Program (2nd version)