2011-06-24 4 views
2

J'essaie de rechercher l'existence d'un mot-clé dans une liste de chaînes. Voici à quoi ressemblerait la liste:Rechercher une liste par mot-clé

Milk, 2 
Eggs, 4 
Juice,1 

Je veux juste faire une recherche dans la liste en donnant un article de la liste d'épicerie. Je veux seulement qu'il recherche le premier mot dans chaque index de la liste pour le nom d'article d'épicerie et ignore le compte à côté du nom d'article. Comment puis-je le faire efficacement?

Répondre

2

Parcourez les éléments en Dictionary<string, int> puis effectuez une recherche par clé.

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

est-ce la méthode la plus efficace/la plus rapide/la plus courte possible? – Greg

+0

@Greg: Je ne sais pas, cela dépend de votre utilisation. Mais votre objectif déclaré est de rechercher efficacement une liste pour un élément donné. Un dictionnaire vous donnera 'O (1)' recherche. Le garder dans une liste vous donnera 'O (n)' lookup (ou 'O (log n)' si vous le gardez trié et faire une recherche binaire). Ne sachant rien d'autre, un dictionnaire est probablement le meilleur parce qu'il vous donne une recherche extrêmement rapide. – jason

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

devrait fonctionner. Vous pouvez également faire i.StartsWith(inputString) ou inputString.Equals(i.Split(",")[0]).

+0

est que le plus efficace/rapide/méthode la plus courte possible? – Greg

0

J'aime la direction de Bala et il fonctionne si vous voulez que la ligne entière (s) la chaîne de recherche se trouve. Si vous avez besoin pour que l'élément, vous devrez diviser la chaîne.

0

suivant retourne null si introuvable ...

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