2010-07-03 10 views

उत्तर

63
arr = arr.sort_by {|x| x.length} 

या 1.8.7+ में:

arr = arr.sort_by(&:length) 
+1

ऐसी पुरानी पोस्ट पर टिप्पणी करने के लिए खेद है, लेकिन क्या आप यह समझा सकते हैं कि: & लंबाई क्या है और यह क्यों काम करती है? क्या यह विधि की लंबाई को बुला रहा है? और क्या महत्व है? –

+3

@DanR हां, यह 'sort_by' द्वारा प्रदान की गई हर वस्तु पर विधि 'लंबाई' को कॉल कर रहा है - बिल्कुल पहली पंक्ति की तरह। उपसर्ग '& 'ऑपरेटर किसी ऑब्जेक्ट को परिवर्तित करता है (विशेष रूप से एक प्रो ऑब्जेक्ट या किसी ऑब्जेक्ट जिसमें' to_proc' विधि होती है, जो ऑब्जेक्ट्स प्रतीक करती है) ब्लॉक में होती है। प्रतीकों के मामले में जो एक ब्लॉक होगा जो दिए गए नाम के साथ विधि को उसके तर्क पर कॉल करेगा (जैसा कि 'प्रतीक # to_proc' परिभाषित किया गया है)। – sepp2k

9

तुम भी sort उपयोग कर सकते हैं:

arr.sort{|x, y| x.length <=> y.length} 
4

arr = arr.sort{|x,y| x.length - y.length} भी काम करता है।

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