2010-03-13 12 views
20

Naturalmente ci sono mille modi per ottenere questo fatto, ma è il modo più semplice (o più elegante) per raggiungere questo obiettivo?sintassi rubino elegante per tornare il maggiore dei due oggetti

Questo in realtà non è troppo malandato, ma cosa faresti?

+0

E 'certamente molto semplice, ma la definizione e la matrice al volo come questo non si sente quel grande. – doctororange

+2

Per me la sintassi dell'array è più chiara della sintassi ternaria. –

+0

ma questo è più secco rispetto alla sintassi ternario – ryan0

risposta

26

Se non si desidera generare una matrice, non c'è l'operatore condizionale:

max = a > b ? a : b 
10

Questo è esattamente il motivo per cui Enumerable#max è stato definito per qualsiasi classe che implementa Comparable. È sicuramente il più semplice. Per capire veramente cosa sta succedendo, dovresti vedere come è stato implementato nella libreria principale della tua implementazione Ruby preferita (ed è probabilmente ottimizzato).

+0

Questa risposta potrebbe beneficiare fornendo un esempio specifico –

+3

La risposta sta dicendo che l'esempio in questione è giusto; non ha bisogno di un altro esempio. – Braiba

10

Va bene, ho provato questo per curiosità:

#!/usr/bin/env ruby 
# -*- mode: ruby -*- 

limit = 3000000 

tstart_1 = Time.now() 
(0..limit).each do |i; a,b, max| 
    a = rand(9999999) 
    b = rand(9999999) 
    max = [a,b].max 
end 
puts "Array method: #{Time.now() - tstart_1} seconds" 

tstart_2 = Time.now() 
(0..limit).each do |i; a,b, max| 
    a = rand(9999999) 
    b = rand(9999999) 
    max = (a > b) ? a : b 
end 

puts "Ternary method: #{Time.now() - tstart_2} seconds" 

uscita:

Array metodo: 1.746134 secondi

metodo ternario: 1.002226 secondi

+0

Il mio era 'Ternario: 1.452967' e' Array: 3.147474'. Sicuramente andando per il ternario :) – m93a

Problemi correlati