2012-10-11 12 views
5

Was ist der kürzeste Weg, um sicherzustellen, dass drei Variablen in Ruby alle gleich sind? Zum BeispielDrei-Wege-Vergleich in Ruby

dog = 'animal' 
cat = 'animal' 
chicken = 'animal' 
shoe = 'clothing' 

# Something like this...which doesn't work 
dog == cat == chicken # true 
dog == cat == shoe # false 

Antwort

11

Die knappste Weise für drei Elemente ist (sorry, Sie zu enttäuschen):

dog == cat && cat == chicken 

Natürlich kann man immer klug, wenn Sie wollen ...

[dog, cat, chicken] == [dog] * 3 
[dog, cat, chicken].uniq.length == 1 

... aber das macht den Code nicht wirklich prägnanter (oder lesbarer).

Ich würde so etwas tun, wenn Sie eine wiederverwendbare Funktion mögen, die willkürlich viele Elemente auf Gleichheit vergleichen:

def all_equal?(*elements) 
    elements.all? { |x| x == elements.first } 
end 
+0

Wow, ungerade. Danke trotzdem. – PlankTon

+4

eine coole Art zu schreiben 'all_equal?': 'Each_cons (2) .all? {| x, y | x == y} '. – tokland

2
dog == cat && dog == chicken 
0

gegebenen Zahlen zum Vergleich:

Hund = ‚Tier‘

cat = 'tier'

huhn = 'tier'

Bekleidung 'Schuh =

ein Array erstellen:

arr = [dog, cat, chicken, shoe] 
arr_length = arr.reject { |a| a != dog }.length 

if arr_length == 0 
puts "All numbers are equal" 
end