[英]What is the best way to convert List <string> to List<type> in 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。 因此,您可以使用兩種方式:
整理清單
這是通過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.