Я могу сделать:
@items = @items.select {|i| i.color == 'blue'}
@items = @items.select {|i| i.color == 'blue' || i.color == 'red'}
Что, если мне дают неизвестное количество цветов и я хочу выбрать их всех? т.е.
['red','blue','green','purple']
# or
['blue','red']
Я работал над путаницей кода, который создает несколько временных массивов и затем объединяет или сглаживает их в одного, но я действительно недоволен им.
Попробуйте следующее:
colors = ['red','blue','green','purple']
@items = @items.select { |i| colors.include?(i.color) }
Вы также можете рассмотреть это вместо этого, для на месте изменения:
@items.reject! { |i| !colors.include?(i.color) }
не уверен, что я полностью понимаю ваш вопрос, но подойдет ли вам?
colors_array = ['blue','red','whatever']
@items = @items.select {|i| colors_array.include?(i)}