2013-08-11 4 views
2

Je me demande, quelle serait la meilleure façon de vérifier si tous les éléments de Array sont conformes à certains critères et renvoyer booléen? Existe-t-il un motif dans Ruby pour appeler la méthode sur la collection, puis renvoyer la valeur booléenne? Enumerable standard méthodes renvoient soit Array ou nil, donc je ne suis pas sûr où look.I've a écrit un exemple qui fonctionne à l'aide grep, mais je pense que if pourrait être sautées avec le code plus idiomatiques:Traitement de tableau et la valeur booléenne de retour

def all_matched_by_regex?(regex) 

    array_collection = ['test', 'test12', '12test'] 
    matched = array_collection.grep(regex) 
    if matched.length == array_collection.length 
     return true 
    end 
    return false 
    end 
+5

Vérifiez 'Array # all?' –

+0

Oui, c'est ça; il faut cependant être conscient du comportement 'all?' avec des collections vides (il renvoie true dans de tels cas). Je suggère de vérifier tout? aussi, juste en inversant le modèle pour vérifier. – raina77ow

+0

C'est tout, oui! Je ne sais pas vraiment comment j'ai réussi à passer tout/tout. Merci. – Zed

Répondre

4

Avez-vous essayé Enumerable.all? {block}? Il semble exactement ce que vous cherchez.

Edit:

Mon Ruby est un peu rouillé, mais voici un exemple de la façon de l'utiliser

regex = /test/ 
=> /test/ 
    array_collection = ['test', 'test12', '12test'] 
=> ["test", "test12", "12test"] 
    array_collection.all? {|obj| regex =~ obj} 
=> true 
+2

Je suis assez sûr que cela compte comme une réponse de lien seulement + un commentaire. Veuillez noter que les réponses par lien uniquement ne sont pas les bienvenues ici. –

+0

@Jan il existe une fonction de bibliothèque standard qui fait exactement ce qui a été demandé. Qu'y at-il à dire? – Antimony

+4

un exemple de code serait bien. Un échantillon de code ciblé sur la situation d'OP - encore mieux. –

0

Vous pouvez modifier:

if matched.length == array_collection.length 
     return true 
    end 
    return false 

avec un simple renvoi:

matched.length == array_collection.length 

Comme ceci:

def all_matched_by_regex?(regex)  
    array_collection = ['test', 'test12', '12test'] 
    matched = array_collection.grep(regex) 
    matched.length == array_collection.length 
end 
+2

Merci, je l'ai en tête. – Zed

+0

Downvoting sans un commentaire est boiteux ... – alfasin

Questions connexes