7
votes

Vérifiez si la matrice contient de la fausse?

Comment vérifier le tableau true_or_false code> contenant une valeur de FALSE?

bool[] true_or_false = new bool[10];

for (int i = 0; i < txtbox_and_message.Length; i++)
{
  bool bStatus = true;
  if (txtbox_and_message[i] == "")
  {
    bStatus = false;
  }
  true_or_false[i] = bStatus;                           
}


8 commentaires

Que fait la boucle? On dirait qu'il vérifie le texte vierge (à plusieurs reprises) et définit tous les éléments true, ou false si la chaîne est vide?


Ne devrait pas bstatus dépendre d'une manière ou d'une autre sur i ? C'est pourquoi Paulg dit correctement que tous les éléments sont les mêmes.


Dupliqué possible de retourner des booléens dans une méthode C #


Vous manquez txtstarter = txtbox_and_message [i]; ? Ou ce que Ben a dit? Votre code contient évidemment des erreurs.


J'ai modifié ma question ..


Cela n'a toujours pas de sens! Si vous êtes itération de la longueur de txtbox_and_message, alors txtbox_and_message [i] ne sera jamais ""


@Paulg: Pas ça. Le .length est le nombre de chaînes dans la matrice, pas la longueur d'une chaîne particulière.


@Ben, ah oui - a du sens maintenant! Je pensais que txtbox_and_message était une seule chaîne plutôt qu'un tableau, et Krunal essayait de vérifier les caractères de la chaîne. Merci


6 Réponses :


2
votes

au lieu de votre code: xxx


0 commentaires

11
votes
return true_or_false.Any(p => !p);

2 commentaires

Malheureusement, non, il a besoin de 3.0 +


@kRunal: Si vous avez des restrictions de plate-forme, vous devez les mettre dans la question.



8
votes
true_or_false.Contains(false);

3 commentaires

Je reçois cette erreur après avoir ajouté System.Linq. Le nom de type ou d'espace de noms 'Linq' n'existe pas dans le système de noms de noms "(manquez-vous une référence d'assemblage?)


Vous devez ajouter une référence dans votre projet à System.core DLL


LINQ est livré avec .NET 3.5 et VS 2008, vous devez donc utiliser une solution itérative telle que les réponses de Pavan ou de Brunolm



16
votes

S'ils ne sont pas tous true, au moins un est faux.

Par conséquent: p> xxx pré>

docu: http://msdn.microsoft.com/en-us/library/bb548541.aspx p>

Modifier: .NET 2.0 Version, comme demandé: P>

int emptyBox = Array.FindIndex(txtbox_and_message, string.IsNullOrEmpty);


3 commentaires

Non, la méthode de l'extension Syntaxe et la notation de Lambda pour le prédicat nécessitent les deux besoin C # 3, mais une version .NET 2 existe (voir Edition).


Vous n'avez pas vraiment besoin de délégués (fonction anonyme ou lambda) pour cela. Vous pouvez faire array.contains (true_or_false, false) qui est très proche du titre (Vérifiez si la matrice contient FALSE). C'est sur .NET 2.0. Lorsque vous avez LINQ, vous pouvez également utiliser la syntaxe true_or_false.contains (false) . EDIT: mal! Dans .NET 2.0, vous devez faire array.indexof (true_or_false, false)! = -1 à la place.


@Jeppestignielsen: Bien sûr, mais ma réponse montre que l'index peut être trouvé sans avoir à préparer l'éventail de booléens à l'avance, que j'ai considéré comme mieux que de rechercher le tableau des booléens.



2
votes

Il y a quelques solutions:

solution 1: Faites une boucle à la boucle après que la boucle vérifie si le true_or_false contient de faux comme ceci:

Si vous souhaitez y parvenir sans astuces de fantaisie, et que vous souhaitez programmer vous-même le code que vous pouvez le faire: xxx

solution 2: xxx

pk


6 commentaires

== false et == vrai doit mourir. Sinon une bonne réponse +1.


Votre deuxième solution fonctionnerait mieux si vous avez utilisé true_or_false.any (x =>! X)


@nasufara: sur quelles preuves basez-vous cette revendication? tout et tout sont des courts-circuits. Si quelque chose, la nécessité d'appeler l'opérateur ! (Boolean non) ne doit qu'une seule fois, il ne faut qu'une seule fois tout plus rapide, mais la différence est presque trop petite à mesurer.


@Pavan: Vous pouvez faire la méthode n ° 1 plus rapide en ajoutant Break; à l'intérieur du Si, comme vous n'avez pas besoin de continuer à rechercher le premier faux.


merci beaucoup de gars. @Billy ive a fait les changements. et @ben, oui c'est vrai. J'ai fait les changements. Merci une fois de plus


Il y avait une restriction de la plate-forme avec la personne qui pose la question de sorte que je n'ai pas mis la troisième solution. Ive a fait les changements cependant. Merci



1
votes

Si sur .NET.NET3.5 + Vous pouvez utiliser system.linq code>, puis vérifier en utilisant tout code> : xxx pré>

Si vous ne pouvez pas utiliser LINQ, vous avez d'autres choix: p>

Utilisation de Array.exists code> Méthode statique: (comme Ben mentionné) p> xxx pré>

en utilisant list.exists code> (vous devriez convertir La matrice à une liste pour accéder à cette méthode) p> xxx pré>

ou vous aurez besoin de itérer via le tableau. p>

bool[] true_or_false = new bool[10];

for (int i = 0; i < txtbox_and_message.Length; i++)
{
    true_or_false[i] = !String.IsNullOrEmpty(txtbox_and_message[i]);
}


1 commentaires

Pourquoi recherchez-vous list.exists au lieu de array.exists ?