我正在尝试搜索字符串列表中是否存在关键字。以下是列表的样子:按关键字搜索按类别搜索按名称搜索关键字
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