2011-09-14 3 views
2

J'essaie de rechercher une chaîne dans un tableau de chaînes en C# mais je ne suis pas sûr de savoir comment. Donc, si le tableau a 50 éléments, la plupart d'entre eux sont nuls, comment irais-je chercher une chaîne dans le tableau? Par exemple:Comment rechercher une chaîne spécifique dans un tableau de chaînes en C# 3.0

string[] this_array; 
this_array = new string[50]; 
this_array[1] = "One, Two, Three"; 
this_array[2] = "Foo, Bar, Five"; 
this_array[3] = null; 

Comment puis-je aller à la recherche de "Five" dans this_array? Je comprends que je dois utiliser une boucle for, je ne suis pas sûr du code réel. Je dois trouver l'index exact donc je ne peux pas obtenir un booléen.

Toute aide serait grandement appréciée!
Jamie

Mise à jour: Voici mon, code très incomplet, jusqu'à présent:

for (array_number = 1; array_number < this_array.Length; array_number++) 
{ 
    //no idea what to put here :S 
} 
+8

Qu'avez-vous déjà essayé? Est-ce le travail à domicile? Avez-vous essayé d'utiliser une boucle 'for'? Si oui, où êtes-vous exactement coincé? :) –

+0

Pourquoi avez-vous plusieurs valeurs dans un seul élément du tableau. C'est une décision de conception horrible. –

+0

Je pense que vous n'avez pas vraiment dérangé recherche sur un moteur de recherche pour ce genre de problème avant de poster. J'ai juste tapé une question dans google à propos de la recherche de texte dans une chaîne et je nage dans les résultats corrects. Vous devriez également rechercher comment fonctionne une boucle for. –

Répondre

0

Vous pouvez essayer ...

int index = -1; 
string find = "Five"; 

for(int i = 0; i < this_array.Length; i++) 
{ 
    if(string.IsNullOrEmpty(this_array[i])) 
     continue; 
    if(this_array[i].ToLowerInvariant().Contains(find.ToLowerInvariant())) 
    { 
     index = i; 
     break; 
    } 
} 

NOTE: Ma recherche est insensible à la casse. Si vous vous souciez du casing des caractères, supprimez les deux instances de .ToLowerInvariant()

+0

vous voudrez probablement exécuter 'ToLowerInvariant' sur la chaîne de recherche. – pstrjds

+0

Pourquoi diable ne voudrais-tu pas juste ajouter (! String.IsNullOrEmpty (this_array [i])) au conditionnel Contient. Bien sûr, il y a de meilleures façons, comme l'a suggéré Fabio. Je dois voter à cause de la mauvaise technique. –

+0

@pstrjds, merci, je voulais mettre cela, mais doit avoir oublié au moment où j'ai tapé tout le reste (besoin Intellisense ici!) – musefan

-1
for(int i=1;i<this_array.length;i++) 
    if(this_array[i]!=null) 
     if(this_array[i].indexOf("Five")>-1 
      return i; 

C'est roughtly C# code - je l'ai fait quelques erreurs mineures. Mais vous pouvez sûrement le faire vous-même. De plus, je pense qu'il y a probablement de meilleurs moyens de le faire.

+1

-1 pour l'utilisation des conditionnels et des boucles sans parenthèses ... – mydogisbox

+0

ne compile pas, et si elle l'a fait, vous pourriez frapper un index hors limites erreur avec la mauvaise chaîne de recherche – musefan

+0

il est seulement rugueux. Et cela fonctionnera en quelque sorte. C'était le moyen le plus rapide de le taper. Il devrait pointer vers la bonne solution. –

2

Utilisez Linq. C'est la façon la plus facile et la moins sujette aux erreurs.

Ajouter une instruction à l'aide de haut:

using System.Linq; 

et de la recherche comme celui-ci.

var result = this_array.Where(x => x != null && x.Contains("string to compare")); 

if (result != null) System.Writeln(result.First()); 
+0

Linq non disponible en 3.0 – pstrjds

+0

OP recherche une recherche "contient" pas une recherche exacte – musefan

+0

Fonctionne uniquement lorsque la chaîne entière correspond à la chaîne de recherche - ne trouverait pas "Cinq", comme décrit dans la question. –

1

Voici un exemple de code pour vous. Cela trouvera le premier index pour une entrée correspondante.

int foundIndex = -1; 
for(int i=0; i < this_array.Length; ++i) 
{ 
    if (!string.IsNullOrEmpty(this_array[i]) && this_array[i].Contains(searchString)) 
    { 
     foundIndex = i; 
     break; 
    } 
} 
0

Depuis c'était devoirs, je vous recommande de vous familiariser avec les méthodes disponibles dans la classe String:

String Methods

MSDN est votre ami.

Questions connexes