2017-06-27 4 views
-2

Ich versuche, eine Funktion zu schreiben, die bei einem Array mit verschiedenen Datentypen ein neues Array nur der String-Elemente zurückgibt. Um zum Beispiel die Anordnung gegeben:Ruby: Löschen Sie alle Nicht-String-Elemente aus einem Array

arr = [1, 3, 'hello', 'goodbye', 20, 'arrays are fun'] 

Ich möchte eine Funktion schreiben, die ein neues Array zurückgibt, die wie folgt aussieht:

new_arr = ['hello', 'goodbye', 'arrays are fun'] 

Ich weiß, dass es ein paar Möglichkeiten, dies sind, aber was ist der effizienteste Weg? Ich weiß, dass Sie .grep verwenden können, aber ist dies die effizienteste Implementierung?

+3

Was haben Sie bisher versucht, und wo sind Sie stecken geblieben? – smarx

Antwort

4
array.delete_if { |obj| !(obj.is_a? String) } 
+3

Oder 'keep_if', um die'! ' – Stefan

+0

Dank zu vermeiden! Ich fand auch '.grep', um zu arbeiten! –

0

Ich fand eine Methode grep die funktionierte!

def remove_non_strings(array) 
    array.grep(String) 
end 
+0

'grep' gibt ein neues Array zurück, es ändert nicht das existierende. – Stefan

+0

Ich wusste das nicht. Sie arbeiteten beide für mein Programm, aber das ist eine gute Unterscheidung zu wissen. Vielen Dank! –

Verwandte Themen