проверить, содержится ли строковое значение в массиве строк - PullRequest
0 голосов
/ 14 июля 2020

Привет, у меня есть список слов, которые я ищу, если это слово найдено, я хочу, чтобы значение было удалено из моего массива

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»

Ответы [ 2 ]

3 голосов
/ 14 июля 2020

!WordList.Any(x => x.Contains(value)) вернет true, если ни один элемент в WordList не содержит value и false, если есть хотя бы один элемент в WordList, содержащий value.

Итак ваш код вернет массив элементов 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

Описание:

  • Enumerable.Where Метод: фильтрует последовательность значений на основе предиката.
  • Enumerable.Any Метод: определяет, есть ли какой-либо элемент последовательности существует или удовлетворяет условию.
  • Enumerable.ToArray Метод: создает массив из IEnumerable.
  • String.Contains(String) Метод: возвращает значение указывает, встречается ли указанная подстрока в этой строке.
0 голосов
/ 14 июля 2020

Не самый эффективный, но работает.

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