2009-12-18 14 views
7

ich tun kann:Array wählen mit mehreren Bedingungen Rubin

@items = @items.select {|i| i.color == 'blue'} 
@items = @items.select {|i| i.color == 'blue' || i.color == 'red'} 

Was passiert, wenn ich eine unbekannte Menge an Farben ist gegeben und ich möchte sie alle wählen? das heißt

['red','blue','green','purple'] 
# or 
['blue','red'] 

Ich habe auf einem Gewirr von Code gearbeitet, die mehrere temporäre Arrays erstellt und geht dann oder flacht sie in ein, aber ich bin damit wirklich unglücklich.

Antwort

18

Try this:

colors = ['red','blue','green','purple'] 
@items = @items.select { |i| colors.include?(i.color) } 

Sie könnten stattdessen auch dies berücksichtigen wollen, für in-Place-Änderungen:

@items.reject! { |i| !colors.include?(i.color) } 
+0

Ehrfürchtig, der zweite ist perfekt. –

1

nicht sicher, ob ich völlig verstehe Ihre Frage, aber für Sie arbeiten würde?

colors_array = ['blue','red','whatever'] 
@items = @items.select {|i| colors_array.include?(i)} 
Verwandte Themen