2011-06-24 310 views
2

我正在尝试搜索字符串列表中是否存在关键字。以下是列表的样子:按关键字搜索按类别搜索按名称搜索关键字

Milk, 2 
Eggs, 4 
Juice,1 

我只是想通过给一个购物清单项搜索列表。我只希望它搜索食品杂货商品名称列表的每个索引中的第一个单词,并忽略该商品名称旁边的计数。我怎样才能有效地做到这一点?

回答

2

解析项目到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"); 
+0

是最有效/最快/最短的方法吗? – Greg

+0

@Greg:我不知道,这取决于你的使用情况。但是你明确的目标是有效地搜索给定项目的列表。一本字典会给你'O(1)'查找。如果将它保存在一个列表中,将会给你'O(n)'查找(或者如果你保持它的排序并进行二进制搜索,就可以使用'O(log n)')。除了别的以外,字典可能是最好的,因为它可以让你快速查找。 – jason

0
var filteredList = groceryList.Where(i => i.Contains(searchString)).ToList() 

应该工作。您可以选择i.StartsWith(inputString)inputString.Equals(i.Split(",")[0])

+0

是最有效的/最快/最短的方法,可能吗? – Greg

0

我喜欢巴拉的方向,如果你想整线(S)的搜索字符串中找到它的作品。如果你只需要获得该项目,你将不得不拆分字符串。

0

继返回空值,如果没有找到......

string searchTerm = "Milk"; 
string item = items.FirstOrDefault(i => i.StartsWith(searchTerm + ","));