2010-03-13 13 views
20

बेशक यह करने के लिए हजारों तरीके हैं, लेकिन यह प्राप्त करने के लिए सबसे सरल (या सबसे सुरुचिपूर्ण) तरीका है?दो वस्तुओं के अधिक से अधिक लौटने के लिए सुरुचिपूर्ण रूबी वाक्यविन्यास

[4,8].max 

यह वास्तव में बहुत शर्मीली नहीं है, लेकिन आप क्या करेंगे?

+0

यह निश्चित रूप से बहुत ही सरल है, लेकिन इस तरह की फ्लाई पर परिभाषित और सरणी उस महान महसूस नहीं करती है। – doctororange

+2

मेरे लिए सरणी वाक्यविन्यास टर्नरी वाक्यविन्यास से स्पष्ट है। –

+0

लेकिन यह टर्नरी सिंटैक्स – ryan0

उत्तर

26

आप एक सरणी अंडे देने के लिए नहीं करना चाहते हैं, वहाँ सशर्त ऑपरेटर है:

max = a > b ? a : b 
10

यही कारण है कि Enumerable#max किसी भी कक्षा के लिए परिभाषित किया गया है जो Comparable लागू करता है। यह निश्चित रूप से सबसे सरल है। वास्तव में यह समझने के लिए कि क्या हो रहा है, आपको यह देखना होगा कि इसे आपके पसंदीदा रूबी कार्यान्वयन की कोर लाइब्रेरी में कैसे कार्यान्वित किया गया है (और यह शायद अनुकूलित है)।

+0

से अधिक DRY है यह उत्तर एक विशिष्ट उदाहरण –

+3

की आपूर्ति करके लाभ प्राप्त कर सकता है उत्तर यह कह रहा है कि प्रश्न में उदाहरण सही है; इसे एक और उदाहरण की आवश्यकता नहीं है। – Braiba

10

ठीक है, मैं जिज्ञासा से बाहर इस परीक्षण किया:

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

आउटपुट:

सरणी विधि: 1.746134 सेकंड

टर्नरी विधि: 1.002226 सेकंड

+0

मेरा 'टर्नरी: 1.452967' और' ऐरे: 3.147474' था। निश्चित रूप से टर्नरी के लिए जा रहा है :) – m93a

संबंधित मुद्दे