रूबी स्ट्रिंग स्लाइस इंडेक्स: str [n..infinity]


84

आसान सवाल है, लेकिन यह डॉक्टर में नहीं मिला।

कैसे मैं nहमेशा के लिए एक स्ट्रिंग या सरणी से टुकड़ा करूँ ?

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

1
उत्तरार्द्ध रूबी 2.6 से काम करेगा और संभवतः इसे प्राप्त करने का 'रेलसे' बन जाएगा - अधिक जानकारी के लिए यहां देखें ।
एसआरएके

जवाबों:


165

रिवर्स इंडेक्सिंग का उपयोग करें:

[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 ->

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


10

रूबी 2.6 में पेश की गई अंतहीन रेंज का उपयोग करके बहुत सुंदर :

string = 'Austin'
string[1..] # => ustin

आशा है कि किसी के लिए काम है। अब तक के सर्वश्रेष्ठ दृष्टिकोण के कुछ पात्रों को काटता है, और एक बार अंतहीन सीमाएं अपनाए जाने के बाद बहुत पठनीय हो जाएगा।


3

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

string = 'Austin'
string[1..string.length]  # => ustin
string[1..string.size]    # => ustin
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.