2009-01-03 9 views

Répondre

9

Array.indexOf:

bool contains = Array.IndexOf(arr, value) >= 0; 

Ou tout simplement utiliser LINQ:

bool contains = arr.Contains(value); 

LINQ devrait être "assez rapide" pour la plupart des buts.

1

Je suis à peu près certain qu'une boucle for est plus rapide, si la vitesse absolue vous concerne. À savoir,

for (int i = 0; i < arr.Length; ++i) 
    if (arr[i] == value) return true; 
return false; 
2

Sauf si vous connaissez le tableau de chaînes est triée par ordre particulier la chose la plus efficace que vous pouvez faire est algorithme linéaire (c.-à comparer chaque chaîne du tableau jusqu'à ce que vous trouviez un match ou à la fin du tableau .

Si le tableau est trié une recherche binaire est beaucoup

plus rapide. une autre façon d'optimiser l'algorithme (bien que la complexité ne soit pas réduite) est vectoriser les comparaisons de chaînes.

7

Si vous êtes seulement vérifier un seul moment e, utilisez Array.IndexOf ou la méthode LINQ Contient comme Marc proposé. Si vous vérifiez plusieurs fois, il peut être plus rapide de convertir d'abord le tableau de chaînes en HashSet<string>.

+0

Bonne prise avec HashSet; +1 ;-p –

1

Si vous effectuez une recherche une ou deux fois, utilisez une recherche linéaire ou IndexOf.

Si vous recherchez plusieurs fois, placez les chaînes dans un HashSet.

Si vous recherchez des millions de fois de manière critique, utilisez un HashSet et gérez vous-même le nombre de seaux.

1

Vous pouvez utiliser le IEnumerable.Foreach extension personnalisée

public static class CollectionExtensions 
{ 
    public static void ForEach<T>(this IEnumerable list, Action<T> action) 
    { 
     foreach (T item in list) 
     { 
      action(item); 
     } 
    } 
} 


class Program 
{ 
    static void Main(string[] args) 
    { 
     String[] list = new String[] { "Word1", "Word2", "Word3" }; 

     list.ForEach<String>(p => Console.WriteLine(p)); 
     list.ForEach(delegate(String p) { Console.WriteLine(p); }); 
    } 
} 

Hope this aide de.

Questions connexes