मैंने इस विधि को एक सरणी में सबसे लंबा शब्द खोजने के लिए बनाया है, लेकिन मुझे आश्चर्य है कि ऐसा करने का एक बेहतर तरीका है या नहीं। मैं रूबी के लिए काफी नया हूं, और इसे inject
विधि सीखने के लिए एक अभ्यास के रूप में किया।सरणी में रूबी सबसे लंबा शब्द
यह या तो सरणी में सबसे लंबा शब्द या बराबर सबसे लंबे शब्दों की सरणी देता है।
class Array
def longest_word
# Convert array elements to strings in the event that they're not.
test_array = self.collect { |e| e.to_s }
test_array.inject() do |word, comparison|
if word.kind_of?(Array) then
if word[0].length == comparison.length then
word << comparison
else
word[0].length > comparison.length ? word : comparison
end
else
# If words are equal, they are pushed into an array
if word.length == comparison.length then
the_words = Array.new
the_words << word
the_words << comparison
else
word.length > comparison.length ? word : comparison
end
end
end
end
end
अगर आप वाकई केवल तार कर रहे हैं, तो आप इसे 'self.group_by (और लंबाई) के रूप में लिख सकते हैं .max.last' वरना आप' self.group_by {तरह फोन to_s' एक अतिरिक्त 'आवश्यकता होगी | एल | el.to_s .size} .max.last'। और अंत में, जब आपके पास केवल एक तत्व होता है तो एक स्ट्रिंग को वापस करने के लिए, आप 'longest_word.size> 1 कर सकते हैं? लौटने से पहले longest_word: longest_word.first'। –
अच्छा! मैंने कोड को अधिक संक्षेप में बनाने की स्वतंत्रता ली, लेकिन अगर आपको शैली –
पसंद नहीं है तो कृपया वापस लौटें। ओपी ने सवाल में कहा कि उसने 'इंजेक्ट' सीखने के लिए ऐसा किया है, और यह स्पष्ट नहीं है कि वह देख रहा था या नहीं 'इंजेक्ट' या बस एक बेहतर तरीका अवधि का उपयोग करने के बेहतर तरीके के लिए। आपकी दूसरी व्याख्या और @Mladen Jablanović के पहले के लिए एक बहुत अच्छा जवाब है। दोनों को मेरा +1 मिलता है। –