Я пытаюсь использовать keep_if в моем приложении Rails 5 с Ruby 2.3.1.Как использовать keep_if со строковым массивом
a = ["a", "b", "c", "d" ]
b = ["b", "d"]
a.keep_if { |v| v=~ /["#{b}"]/ }
#=> ["b", "d"]
Реальный проект:
a = ["apple", "banana", "orange"]
b = ["mangoes", "banana", "pear"]
a.keep_if { |v| v=~ /["#{b}"]/ }
#=> ["mangoes", "banana", "pear"]
Что я ожидал:
#=> ["banana"]
Я предполагаю, что какое-то регулярное выражение будет использоваться? Как получить то, что я ожидал?
Как насчет 'a.keep_if {| v | b.include? (v)} '? –
Egad! Почему спешить, чтобы выбрать ответ ??? –
Чтобы понять, почему ваш код не работает, подумайте о том, что это на самом деле делает: '/ [" # {b} "] /'. Когда вы используете строчную интерполяцию ('# {...}'), Ruby вызывает 'to_s' значение и помещает результат в строку. 'b.to_s' в этом случае возвращает' ["b", "d"] ', поэтому ваше окончательное регулярное выражение таково:'/["[" b "," d "]"]/'. Проверка того, что регулярное выражение было бы хорошим первым шагом для отладки этого кода. –