2017-03-31 4 views
0

Ich habe zwei Arrays mit Logins und Dateierweiterungen: logins = ['Bob', 'Mark', 'Joe'] Extensions = [' .doc ',' .xls ']Überprüfen Sie, ob einer der Werte aus beiden Listen in der Zeichenfolge in Ruby

Ich muss überprüfen, ob einer der Werte aus beiden Listen im String vorhanden ist (String ist wie str = "aaa bob test.txt Testtext"), und falls ja Arbeite etwas.

Wie Sie diese Überprüfung in Ruby korrekt durchführen.

Jetzt mache ich das mit mehreren Schleifen- und if-Anweisungen.

Antwort

2
[logins, extensions].all? do |list| 
    list.any? { |match| str.include? match } 
end 

Sie haben zwei Listen, Logins und Erweiterungen. Sie möchten sicherstellen, dass all? von ihnen etwas tun und das "etwas" ist, dass die Zeichenfolge any? ihrer Elemente enthält.

Die Antwort mit Regex ist besser, wenn auch etwas weniger einfach zu schreiben.

2

könnten Sie auch Regexp.union verwenden:

str = 'aaa bob test.xls test text' 
logins  = Regexp.union(['bob', 'mark', 'joe']) 
extensions = Regexp.union(['.doc', '.xls']) 
str =~ logins && str =~ extensions 
# => 12 

Es gibt entweder nil, wenn einer von beiden nicht übereinstimmen oder eine ganze Zahl, wenn beide aufeinander abgestimmt.

Als Alternative Ruby 2.4:

str.match?(logins) && str.match?(extensions) 

, die einen boolean zurückkehren würde.

+0

Dank, das ist mehr für mich lesbar funktioniert aber weniger langsamer. Die Ergebnisanwendung verfügt über ein Anmeldearray mit ca. 500 Datensätzen. – RubyMarcus

0

Sie können einfach das Array hinzufügen, um die Vereinigung mit eindeutigen vales zu erhalten und dann iterieren, um zu überprüfen, ob die Zeichenfolge einen übereinstimmenden Wert hat.

str = 'aaa bob test.txt test text' 
    (logins + extensions).any? { |word| str.include?(word) } 

gibt ‚true‘ oder ‚false‘

Verwandte Themen