поиск подстроки в списке строк - PullRequest
2 голосов
/ 07 января 2020

У меня есть список строк, и у меня есть несколько строк, добавленных к нему. пример: l1 - список с тремя значениями

List<string> l1 = new List<string> 
{
     "issue: there are multiple data errors ",
     "resolution: you can correct the data or /n raise an SR on this issue",
     "rootfix: you need to be contious while entering the data "
};

Теперь мне нужно проверить, есть ли в этом списке все три ключевые строки ie.

List<string> keyWords = new List<string> { "isue", "resolution", "rootfix" };

Не думаю, что смогу используйте операцию Contains для этого, так как вышеприведенные строки являются подстрока строк списка.

Пожалуйста, дайте мне знать, если какая-либо функция доступна /logic.

Если все три подстроки есть в списке, тогда мне нужно вернуть boolian

Ответы [ 4 ]

2 голосов
/ 07 января 2020

Вы можете проверить, совпадают ли Все ключевые слова в Любой элемент вашего набора слов, который может String.Contains ваше ключевое слово

List<string> keyWords = new List<string>{"issue","resolution","rootfix"};

List<string> wordSet = new List<string>{"issue: there are multiple data errors ", "resolution: you can correct the data or /n raise an SR on this issue", "rootfix: you need to be contious while entering the data "};

bool result = keyWords.All(x => wordSet.Any(w => w.Contains(x)));

Человеку легче читать изнутри

1 голос
/ 07 января 2020

Я не уверен на 100%, показывает ли ваш пример три отдельные строки в вашей List<string> или они одна строка .

В первом случае, три отдельные строки в List<string>, вы можете использовать что-то вроде:

bool isInList = l1.Any(x => x.StartsWith("issue")) &&
                l1.Any(x => x.StartsWith("resolution")) &&
                l1.Any(x => x.StartsWith("rootfix"));

Это вернет true, если все соответствующие строки найдены в l1.

Если это второй случай и одна строка, содержащая значения, как вы их описали:

string l1 = "{\"issue: there are multiple data errors \", \"resolution: you can correct the data or /n raise an SR on this issue\", \"rootfix: you need to be contious while entering the data \"}";
bool isInString = l1.Contains("\"issue") &&
                  l1.Contains("\"resolution") &&
                  l1.Contains("\"rootfix"))

Это вернет true, где все три имени появляются в одной строке.

0 голосов
/ 07 января 2020

Можете ли вы использовать LINQ? Просто используя Where () и String.StartsWith (), вы можете добиться этого!

        var list = new List<string> {
            "issue: test1",
            "resolution: test2",
            "rootfix: test3"
        };

        var issues = list.Where(x => x.StartsWith("issue"));

        foreach(var i in issues) {
            Console.WriteLine(i);
        }

        Console.Read();

OUTPUT: "issue: test1"

0 голосов
/ 07 января 2020

Это должно работать:

var data = new []{"issue: there are multiple data errors ", "resolution: you can correct the data or /n raise an SR on this issue", "rootfix: you need to be contious while entering the data "};

bool flag = (
    data.Any(d => d.StartsWith("issue:")) &&
    data.Any(d => d.StartsWith("resolution:")) &&
    data.Any(d => d.StartsWith("rootfix:"))
    );
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...