2010-08-31 19 views
60

आसान सवाल है, लेकिन इसे दस्तावेज़ में नहीं मिला।रूबी स्ट्रिंग स्लाइस इंडेक्स: str [n..infinity]

मैं n से स्ट्रिंग या सरणी को हमेशा तक कैसे स्लाइस करूं?

>> 'Austin'[1..3] 
=> "ust" 
>> 'Austin'[1..] 
SyntaxError: compile error 
(irb):2: syntax error, unexpected ']' 
    from (irb):2 

उत्तर

119

उपयोग रिवर्स अनुक्रमण:

रूबी में
[1..-1] 

तत्वों और कुछ अन्य भाषाओं सीधे आगे अनुक्रमण है और रिवर्स (मैं में गलती कर सकते हैं शब्दावली)। तो, लंबाई n के साथ स्ट्रिंग 0..(n-1) और अतिरिक्त (-n)..1 अनुक्रमणिका है, लेकिन अब और नहीं। आप >=n या <-n अनुक्रमणिका का उपयोग नहीं कर सकते हैं।

'i' 'n'|'A' 'u' 's' 't' 'i' 'n'|'A' 'u' 's' 't' 'i' 'n'|'A' 'u' 's' 
-8 -7 -6 -5 -4 -3 -2 -1 0 1 2 3 4 5 6 7 8 
<- error|    you can use this    | error -> 
+12

+1 चित्रण – bta

+1

अच्छा उदाहरण के लिए "के आपके उपयोग का उपयोग कर सकते हैं, हालांकि, मान्य "अक्षरों (यानी स्ट्रिंग में मौजूद हैं) मेरी राय में थोड़ा भ्रामक है क्योंकि स्ट्रिंग की सीमाओं के बाहर डेटा वास्तव में अपरिभाषित हैं। यह गैर-पात्रों सहित कुछ भी हो सकता है। वैसे भी, इस तरह के एक सुप्रसिद्ध उत्तर के लिए +1 :-) –

11

उपयोग -1 :-)

'Austin'[1..-1] # => "ustin" 
3

का उपयोग कर आप एक चर करने के लिए स्ट्रिंग असाइन करते हैं प्रयास करने पर आपको लंबाई/आकार

string = 'Austin' 
string[1..string.length] # => ustin 
string[1..string.size] # => ustin 
संबंधित मुद्दे