2011-11-07 43 views
7

Tôi có một mảng các chuỗi: phrases = ["Have a good Thanksgiving", "Eat lots of food"]Ruby - Cách kiểm tra xem chuỗi có chứa tất cả các từ trong một mảng không?

tôi có một loạt các từ đơn: words = ["eat", "food"]

Tôi muốn quay trở lại các mục trong mảng đầu tiên nếu chuỗi có chứa tất cả các từ trong mảng thứ hai.

Vì vậy, nó sẽ giống như thế này:
phrases.select{ |x| x.include_all?(words) }

Nên tôi chỉ tạo ra include_all? chức năng để lặp qua mỗi thành viên của mảng words và thực hiện so sánh, hoặc là có bất kỳ phương pháp tích hợp trong I 'M mất tích?

+0

phần nào về tính toán từng phần? tức là từ = "ăn" cụm từ = ["Tôi không thích thịt"] – tokland

Trả lời

11

Bạn thực sự rất gần với giải pháp.

phrases.select do |phrase| 
    words.all?{ |word| phrase.include? word } 
end 

Phương pháp all? là trên Enumerable, và trả về true nếu khối để đánh giá đúng cho mỗi mục trong bộ sưu tập.

Tùy thuộc vào chính xác định nghĩa của cụm từ "bao gồm" từ, bạn có thể muốn xác định phương pháp include_all? của riêng mình hoặc phương pháp trên String để xác định kết quả phù hợp. Phương thức include? phân biệt chữ hoa chữ thường và không quan tâm đến ranh giới từ. Nếu những yêu cầu đó không phải là yêu cầu của bạn, bạn có thể sử dụng Regexp thay cho số include? hoặc xác định phương pháp của riêng bạn để bao bọc logic đó.

+0

Điều đó hoạt động, cảm ơn. Tôi chỉ gọi là 'upcase' trên các lĩnh vực được so sánh để đảm bảo rằng trường hợp không phải là một vấn đề. – johnnycakes

Các vấn đề liên quan