在列表中搜索指定的字符串

时间:2016-09-20 16:39:53

标签: c# string list search

我正在尝试搜索字符串列表。我希望能够返回任何包含字符串信息的结果。例如:

(我已经有一个包含值的列表)列表字符串包含

  

" dog"," cat"," doghouse"," doge"," mouse"

我想要一种检查字符串的方法,例如:

string dog = "dog"

并返回值:

  

" dog"," doghouse"," doge"

这是我到目前为止所做的,至少我需要帮助的部分。

Console.WriteLine("What would you like to search for (Title: Full Title; Author: first, last): ");
search = Console.ReadLine();

var results = bookList.Where(x => x.Contains(search)).ToList();
if (results != null)
{
    Console.WriteLine(results);
    //i--;
    search = String.Empty;
    clearvars results;
    Console.WriteLine("Press Enter to continue");
    Console.ReadLine();
    continue;
}

search是一个空字符串

bookList是我的List<string>

i只是一个计数器,对于这个

并不是必需的

如果这会改变任何事情,我会在for循环中完成这一切。

4 个答案:

答案 0 :(得分:1)

你需要一个像foreach这样的循环来遍历结果:

foreach (var item in results)
{
    Console.WriteLine(item);
}

因为正如您所说我希望能够返回任何找到的结果,但由于resultsstrings的列表,所以您需要遍历列表到打印列表中的每个项目。

答案 1 :(得分:1)

您需要迭代结果的每个元素(results变量)。

Console.WriteLine("What would you like to search for (Title: Full Title; Author: first, last): ");
search = Console.ReadLine();
var results = bookList.Where(x => x.Contains(search)).ToList();
if (results != null)
{
    foreach (var result in results)
    {
        Console.WriteLine(result);
    }
    Console.WriteLine("Press Enter to continue");
    Console.ReadLine();
}

您需要在results上进行迭代,因为它是一个List。当您将列表传递给Console.WriteLine()时,Console.WriteLine(results)会在ToString()上调用方法results。 在列表上调用ToString()会返回:System.Collections.Generic.List1[System.String]这是您在控制台上看到的内容。

System.Collections.Generic.List1[System.String]是列表对象的字符串表示形式,但您真正感兴趣的是列表的元素。这就是你需要迭代列表并分别打印每个元素的原因。

您还可以将results列表的所有元素加入到一个字符串中,然后将其打印出来:

var allResultsInOneString = string.Join(", ", results);
Console.WriteLine(allResultsInOneString);

答案 2 :(得分:0)

这是一种方式:

string[] searchList = new[] { "dog", "cat", "doghouse", "doge", "mouse" };
string searchString = "dog";
var matches = searchList.Where((x) => Regex.IsMatch(x, searchString));

答案 3 :(得分:0)

如果你想使用linq,你也可以这样做:

  bookList.Where(x => x.Contains(search)).ToList().ForEach(x => Console.WriteLine(x));