我正在嘗試搜索字符串列表中是否存在關鍵字。以下是列表的樣子:按關鍵字搜索按類別搜索按名稱搜索關鍵字
Milk, 2
Eggs, 4
Juice,1
我只是想通過給一個購物清單項搜索列表。我只希望它搜索食品雜貨商品名稱列表的每個索引中的第一個單詞,並忽略該商品名稱旁邊的計數。我怎樣纔能有效地做到這一點?
我正在嘗試搜索字符串列表中是否存在關鍵字。以下是列表的樣子:按關鍵字搜索按類別搜索按名稱搜索關鍵字
Milk, 2
Eggs, 4
Juice,1
我只是想通過給一個購物清單項搜索列表。我只希望它搜索食品雜貨商品名稱列表的每個索引中的第一個單詞,並忽略該商品名稱旁邊的計數。我怎樣纔能有效地做到這一點?
解析項目到Dictionary<string, int>
,然後只是按鍵查找。
List<string> items = new List<string> {
"Milk, 2",
"Eggs, 4",
"Juice, 1"
};
var dictionary = items.Select(s => s.Split(','))
.ToDictionary(x => x[0], x => Int32.Parse(x[1]));
bool contains = dictionary.ContainsKey("Milk");
var filteredList = groceryList.Where(i => i.Contains(searchString)).ToList()
應該工作。您可以選擇i.StartsWith(inputString)
或inputString.Equals(i.Split(",")[0])
。
是最有效的/最快/最短的方法,可能嗎? – Greg
我喜歡巴拉的方向,如果你想整線(S)的搜索字符串中找到它的作品。如果你只需要獲得該項目,你將不得不拆分字符串。
繼返回空值,如果沒有找到......
string searchTerm = "Milk";
string item = items.FirstOrDefault(i => i.StartsWith(searchTerm + ","));
是最有效/最快/最短的方法嗎? – Greg
@Greg:我不知道,這取決於你的使用情況。但是你明確的目標是有效地搜索給定項目的列表。一本字典會給你'O(1)'查找。如果將它保存在一個列表中,將會給你'O(n)'查找(或者如果你保持它的排序並進行二進制搜索,就可以使用'O(log n)')。除了別的以外,字典可能是最好的,因爲它可以讓你快速查找。 – jason