【问题标题】:test if string value is contained in array of strings测试字符串值是否包含在字符串数组中
【发布时间】:2020-11-03 15:51:12
【问题描述】:

您好,我有一个单词列表,如果找到该单词,我希望从数组中删除该值

private static string[] WordList = { "Example No", "Name", "Client ID"};

var listToTest = new[] { "ME 0.3", "Example No.: 1243", "Name.:"};

var newList= new List<string>();
foreach (var value in listToTest)
{
    if (!WordList.Any(x => x.Contains(value)))
    {
        newList.Add(value);
    }
 }

return newList.ToArray();

我的测试返回我只希望它返回的所有值 "ME 0.3"

【问题讨论】:

标签: c# arrays string contains


【解决方案1】:

如果WordList 中没有元素包含value,!WordList.Any(x =&gt; x.Contains(value)) 将返回true,如果WordList 中至少有一个元素包含value,则false。

因此,您的代码将返回 listToTest 的元素数组,WordList 中的任何元素都不包含它们,但正如您所说,您想要一个 listToTest 的元素数组,它们不包含 WordList 的元素.所以在... x.Contains(value))) 中替换x 和value:

private static string[] WordList = { "Example No", "Name", "Client ID"};

var listToTest = new[] { "ME 0.3", "Example No.: 1243", "Name.:"};

var newList= new List<string>();
foreach (var value in listToTest)
{
    if (!WordList.Any(x => value.Contains(x)))
    {
        newList.Add(value);
    }
 }

return newList.ToArray();

顺便说一句,有一个更简洁的方法:

var result = listToTest.Where(x => !WordList.Any(y => x.Contains(y))).ToArray();

// Usage:
foreach (var s in result)
    Console.WriteLine(s);

// Output:
// ME 0.3

说明:

【讨论】:

    【解决方案2】:

    不是最有效的,但很有效。

      newList = listToTest.Where((x) =>
      {
          return WordList.Where(x2 => x.IndexOf(x2) != -1).Count() == 0;
      }).ToList();
    

    【讨论】:

      猜你喜欢
      • 2012-02-18
      • 1970-01-01
      • 2018-11-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-11-21
      • 2021-12-14
      • 2017-04-27
      相关资源
      最近更新 更多