簡體   English   中英

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

[英]What is the best way to search for a string in a list of list of strings c#

在字符串列表中搜索字符串的最佳方法是什么? 示例我有很多字符串列表,例如List1 List 2等,並且所有列表都收集在列表列表中(例如ListofLists <,...>。現在我要在列表列表中搜索字符串“ foo”有沒有辦法在C#中對此進行優化?

提前致謝

使用Linq:

要檢查任何列表中是否包含字符串“ foo”:

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

要獲取包含字符串“ foo”的特定列表,請執行以下操作:

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

這樣行嗎?

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

// insert code to populate listOfLists

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

我將總結/優化其他答案:

最好的方法是使用LINQ。 因此,您可以使用兩種方式:

  1. 您可以展平列表,並查看其中是否包含元素
  2. 您可以檢查所有列表,而其中一個列表包含元素

整理清單

這是通過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個條目,第一種可能性平均需要34毫秒,第二種可能性平均需要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:

但這不那么易讀,不太有效,更復雜且不太美觀。

但是,如果您不只是要檢查它是否存在,還可以對其進行更多操作,那么最后一種可能就是最簡單的方法。 如果您想要針對其他情況的優化版本,請隨時指定您的要求。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM