2010-11-09 18 views
5

क्योंकि प्रतीकों < => विधि द्वारा उपयोग की जाने वाली विधि का जवाब नहीं देते हैं, क्या किसी के पास प्रतीकों की सरणी को सॉर्ट करने की तकनीक है? कुछ अन्य विचारों को देखने में रुचि रखते हैं।ruby: प्रतीकों की क्रमबद्ध सरणी

+1

आप याद रखना चाहिए कि एक प्रतीक एक स्ट्रिंग नहीं है, बल्कि एक सुंदर नाम के साथ एक संख्या है। मैं आपके प्रश्न को समझता हूं कि 'object_id' – guns

+1

द्वारा प्रतीकों को कैसे क्रमबद्ध किया जाए, मैं निश्चित रूप से कुछ नहीं कह सकता, लेकिन यदि आप प्रतीकों को वर्णानुक्रम में क्रमबद्ध कर रहे हैं, तो आप कुछ गलत कर रहे हैं। –

उत्तर

16

अच्छा, symbols.sort_by {|sym| sym.to_s} काम करता है।

इसके अलावा 1.9 में प्रतीकों तो वहाँ तुम सिर्फ symbols.sort कर सकते हैं, <=> करने के लिए प्रतिक्रिया करते हैं।

+3

और 1.8.7 पर, 'symbols.sort_by &: to_s' – guns

+0

@ गन्स: प्रतीकों को क्रमबद्ध करने के लिए प्रतीक # to_proc का उपयोग करना? यह विडंबना होना चाहिए! –

5

तुम बड़े माणिक पर काम करने के रूप में यद्यपि वे 1.9 थे चाहते हैं तो आप सिर्फ < => परिभाषित कर सकते हैं प्रतीक

पर
class Symbol 
    include Comparable 

    def <=>(other) 
    self.to_s <=> other.to_s 
    end 
end 
+0

यह कमाल का जवाब अद्भुत है। –

2

आप backports मणि का उपयोग कर सकते हैं:

require 'rubygems' 
require 'backports/1.9.1/symbol/comparison' 
[:a, :d, :c, :b].sort 
# => [:a, :b, :c, :d] 
संबंधित मुद्दे