2011-06-24 307 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 + ","));