C#:检查搜索词的列表并打印所有匹配值,或者如果不存在匹配值则显示 Not found

C#: Check list for search term and print all matching values, or display Not found if no matching values exist

我正在尝试向我的应用添加搜索选项。如果用户的搜索词存在于(字符串)列表中,则应显示该列表中的所有匹配元素。如果没有,则应显示“未找到”。我有 for 循环工作,但我似乎无法找到未找到条件应该去哪里。

for (int i = 0; i<myList.Count; i++)
            {
                if (myList[i].Contains(search))
                {
                    WriteLine(myList[i]);
                } else
                {
                    WriteLine("not found");
                }
            }

由于您想要获得所有匹配项,因此您需要保留一个 运行 找到的匹配项列表。检查完列表中的所有项目后,您可以通过检查列表中有多少匹配项来确定是否找到 none。

var matches = new List<string>();

for (int i = 0; i < myList.Count; i++)
{
    if (myList[i].Contains(search))
    {
        matches.Add(myList[i]);
    }
}

if (matches.Count == 0)
{
     WriteLine("not found");
}
else
{
    foreach (var match in matches)
    {
        WriteLine(match);
    }
}

如果以后不需要匹配项,可以用 int 替换列表并在找到匹配项时递增它。如果在循环中找到匹配项,则将匹配项写入行。然后在你检查完列表中的所有项目后,你可以检查你的计数器是否为零,如果是,写一行“未找到”。

var counter = 0;

for (int i = 0; i < myList.Count; i++)
{
    if (myList[i].Contains(search))
    {
        WriteLine(myList[i]);
        counter++;
    }
}

if (counter == 0)
{
    WriteLine("not found");
}

1.您可以使用 lambda 来解决您的问题。

很简单,但别忘了加上using System.Linq。 Lambda 结果(包含所有需要的项目)将记录在变量 match 中,根据它的大小 match.Count() 您可以打印所有结果,如果没有任何内容可打印则出错。

var match = myList.Where(s => s.Contains(search));
if (match.Count() == 0) {
    Console.WriteLine("Not found!");
} else {
    foreach (var item in match) {
        Console.WriteLine(item);
    }
}

2。好老for-loop.

只需将所有匹配项添加到另一个列表,然后像在 lambda-case 中一样处理它们。

var match = new List<string>();
foreach (var item in myList) {
    if (item.Contains(search)) { 
        match.Add(item);
    }
}
if (match.Count() == 0){
    Console.WriteLine("Nothing found!");
} else {
    foreach (var item in match) {
        Console.WriteLine(item);
    }
}

总而言之,主要思想是将搜索结果存储在另一个变量中,然后使用它。

3。找到标志。

另一种方法是使用一些 bool 标志,并在我们发现某些东西时将其变为真。

bool foundFlag = false;
foreach (var item in myList) {
    if (item.Contains(search)) {
        foundFlag = true;
        Console.WriteLine(item);
    }
}
if (!foundFlag){
    Console.WriteLine("Nothing found!");
}