2014-04-27 22 views
5

Tôi muốn kiểm tra xem có bất kỳ phần tử nào trong mảng này words = ["foo", "bar", "spooky", "rick james"] là các phần tử của cụm từ sentence = "something spooky this way comes".Kiểm tra xem chuỗi có chứa bất kỳ chất nền nào từ một mảng

Trả về true nếu có bất kỳ kết quả trùng khớp nào, sai nếu không.

giải pháp hiện tại của tôi (tác phẩm nhưng có lẽ không hiệu quả, tôi vẫn đang học Ruby):

is_there_a_substring = false 
words.each do |word| 
    if sentence.includes?(word) 
    is_there_a_substring = true 
    break 
    end 
end 
return is_there_a_substring 

Trả lời

17

giải pháp của bạn là hiệu quả, nó chỉ là không phải là biểu cảm như Ruby cho phép bạn được. Ruby cung cấp các phương pháp Enumerable#any? để thể hiện những gì bạn đang làm với vòng lặp rằng:

words.any? { |word| sentence.include?(word) } 
+0

gotta tình yêu ruby ​​... (sẽ chấp nhận trong 4 phút khi hẹn giờ là lên) –

+4

sử dụng 'bao gồm?' như 'bao gồm?' không làm việc cho tôi trong ruby2.0 – Radek

+1

Không có 'bao gồm? 'trong Ruby. Câu trả lời này cần được chỉnh sửa để sử dụng 'include? ' – JEMaddux

4

Một lựa chọn khác là sử dụng một biểu thức chính quy:

if Regexp.union(words) =~ sentence 
    # ... 
end 
Các vấn đề liên quan