在字符串列表列表中搜索字符串的最佳方法是什么?

时间:2017-04-29 12:44:53

标签: c# list search

在字符串列表列表中搜索字符串的最佳方法是什么? 示例I有许多字符串列表,例如List1 List 2等,所有列表都收集在列表列表中(例如ListofLists<,...>。 现在我想在列表列表中搜索字符串“foo”。有没有办法在c#中优化它?

提前致谢

3 个答案:

答案 0 :(得分:1)

使用Linq:

检查是否有任何列表包含字符串'foo':

collection.Any(x => x.Contains("foo"));

获取包含字符串'foo'的特定列表:

collection.FirstOrDefault(x => x.Contains("foo"));

答案 1 :(得分:1)

这有用吗?

var listOfLists = new List<List<string>>();

// insert code to populate listOfLists

var containsFoo = listOfLists.SelectMany(x => x).Any(x => x == "foo");

答案 2 :(得分:1)

我只是总结/优化其他答案:

执行此操作的最佳方法是使用LINQ。因此,您可以使用两种方式:

  1. 您可以展开列表,看看它是否包含元素
  2. 您可以检查列表中包含元素的所有列表
  3. 展开列表

    这是通过SelectMany

    完成的
    listOfLists.SelectMany(x => x).Contains("foo");
    

    SelectMany将子列表的子元素和子列表的所有元素(等等)合并到一个列表中,这样您就可以检查所有项目,其中包含字符串(https://msdn.microsoft.com/de-de/library/bb534336(v=vs.110).aspx)。

    检查所有列表

    这是通过Any

    完成的
    listOfLists.Any(x => x.Contains("foo"));
    

    Any检查任何项目是否符合条件(https://msdn.microsoft.com/de-de/library/bb337697(v=vs.110).aspx)。

    实际上检查所有列表似乎更有效(使用随机生成的列表,总共有10,000个条目,第一种可能需要34ms,第二种可能需要31)。

    在两种可能性中,我使用Contains,它只是检查,列表中包含元素(https://msdn.microsoft.com/de-de/library/bb352880(v=vs.110).aspx)。

    当然你也可以使用循环:

    var contains = false;
    foreach (var l in listOfLists)
        foreach (var i in l)
            if (i == "foo")
            {
                contains = true;
                goto end;
            }
    end:
    

    但这不太可读,效率低,更复杂,也不那么优雅。

    然而,如果你不想只是想检查,那么它存在,但用它做多一点,最后一种可能性可能是最简单的。如果您想要针对其他案例的优化版本,请随时指定您的要求。

相关问题