2017-03-22 4 views
-2

Ich mache eine Übung, bei der die Eingabe ein Array ist. Ich brauche eine Möglichkeit, false zurückzugeben, wenn das Array etwas anderes als die Strings 'n', 's', 'e' und 'w' enthält oder wenn das Array keine der Strings 'n', 's' enthält. "e" und "w". Gibt es dafür eine vordefinierte Methode? Wenn nicht, wie kann das gemacht werden?Gibt es eine Array-Methode in Ruby für "muss mindestens eine davon enthalten, kann aber nichts anderes enthalten"?

+0

Ich vertraue dir nicht bearbeiten nichts ausmacht, und dass ich nicht Geben Sie die Frage falsch an. –

Antwort

2

Ich glaube nicht, dass es eine eingebaute Methode gibt, die Sie verwenden könnten. Wenn Ihr Array ist, könnten Sie Folgendes tun.

directions = ['n', 's', 'e', 'w'] 

arr.any? && (arr-directions).empty? 

Einige Beispiele:

arr = ['n', 's', 'n'] 
arr.any? && (arr-directions).empty? 
    #=> true 

arr = ['n', 's', 'f'] 
arr.any? && (arr-directions).empty? 
    #=> false 

arr = ['f', 'g'] 
arr.any? && (arr-directions).empty? 
    #=> false 

arr = [] 
arr.any? && (arr-directions).empty? 
    #=> false 
+0

Dies scheint die einfachste Antwort zu sein, danke. Ich habe die Antwort von SYoung82 nur verwendet, weil ich bereits einen Block mit "if" -Anweisungen hatte und es einfach hinzugefügt habe. Ist das nicht schlau? Ich bin ziemlich neu in Ruby. –

+0

Ich kann nicht sagen, ob das schlau ist oder nicht. Einige Rubies werden minimale Änderungen vornehmen, damit ihr Code funktioniert. andere, wenn sie an eine bessere Art denken, etwas zu tun, werden all ihren alten Code ausreißen. Es kann auch von Zeitdruck abhängen. –

0

Nein, soweit ich bin mir bewusst, in Funktion gebaut. Du könntest etwas wie unten tun oder das Include ausprobieren? Methode auf Ihrem Array. Siehe http://apidock.com/ruby/Array/include%3F

array.each do |element| 
    if element != 'n' && element != 's' && element != 'e' && element != 'w' 
    return false 
    end 
end 

return true 

Das durch jedes Element des Arrays gehen sollte und vergleicht jedes Element auf 'n', 's', 'E' und 'w'. Wenn etwas gefunden wird, das nicht übereinstimmt, wird false zurückgegeben. Wenn es den ganzen Weg durchmacht, ohne etwas Außergewöhnliches zu finden, wird es wahr. Vielleicht möchten Sie am Anfang auch nach einem leeren String suchen.

+1

Vielen Dank, dass ich es verwendet habe und es funktioniert super –

+0

@ichi_the_killer bedenken Sie, dass, wie es steht, diese Lösung 'true' für ein leeres Array' [] 'zurückgibt. –

0

Sie können grep und grep_v mit regex verwenden:

def news? arr 
    r = /[news]/ 
    !arr.grep(r).empty? && arr.grep_v(r).empty? 
end 

Carys Tests verwenden (wenn auch nur leicht modifiziert):

news? ['n', 's', 'n'] #=> true 
news? ['n', 's', 'f'] #=> false 
news? ['f', 'g', 'h'] #=> false 
news? []    #=> false 
+0

Ich habe noch nie grep oder grep_v verwendet, ich muss mich an sie erinnern, danke –

Verwandte Themen