2010-03-13 26 views
20

Tất nhiên có một nghìn cách để thực hiện việc này, nhưng cách đơn giản nhất (hoặc thanh lịch nhất) để đạt được điều này là gì?Cú pháp ruby ​​thanh lịch để trả về số lớn hơn của hai đối tượng

[4,8].max 

Đó thực sự không quá tồi tàn, nhưng bạn sẽ làm gì?

+0

Nó chắc chắn rất đơn giản, nhưng xác định và mảng trên bay như thế này không cảm thấy tuyệt vời. – doctororange

+2

Đối với tôi, cú pháp mảng rõ ràng hơn cú pháp ternary. –

+0

Nhưng điều này là nhiều hơn so với cú pháp ternary – ryan0

Trả lời

26

Nếu bạn không muốn để đẻ trứng một mảng, có các nhà điều hành có điều kiện:

max = a > b ? a : b 
10

Đó chính xác là lý do tại sao Enumerable#max đã được xác định cho bất kỳ lớp nào triển khai Comparable. Nó chắc chắn là đơn giản nhất. Để thực sự understad những gì đang xảy ra, bạn cần phải nhìn như thế nào nó được thực hiện trong thư viện cốt lõi của Ruby thực hiện yêu thích của bạn (và nó có thể tối ưu hóa).

+0

Câu trả lời này có thể được hưởng lợi bằng cách cung cấp một ví dụ cụ thể –

+3

Câu trả lời là nói rằng ví dụ trong câu hỏi là đúng; nó không cần một ví dụ khác. – Braiba

10

Được rồi, tôi thử nghiệm này ra khỏi tò mò:

#!/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" 

Output:

Mảng phương pháp: 1.746134 giây

Phương thức ba năm: 1.002226 giây

+0

Mine là 'Ternary: 1.452967' và' Array: 3.147474'. Chắc chắn sẽ cho ternary :) – m93a

Các vấn đề liên quan