ดัชนีชิ้นสตริงทับทิม: str [n..infinity]


86

คำถามง่ายๆ แต่หาไม่เจอในเอกสาร

ฉันจะตัดสตริงหรืออาร์เรย์จากnจนตลอดไปได้อย่างไร

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

1
ตัวหลังจะทำงานจาก Ruby 2.6 และน่าจะกลายเป็นวิธี 'Railsy' ในการบรรลุเป้าหมายนี้ - ดูข้อมูลเพิ่มเติมที่นี่
SRack

คำตอบ:


167

ใช้การทำดัชนีย้อนกลับ:

[1..-1]

องค์ประกอบใน Ruby (และภาษาอื่น ๆ ) มีดัชนีตรงไปตรงมาและดัชนี "กลับด้าน" ดังนั้นสตริงที่มีความยาว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

สวยสง่าโดยใช้ช่วงที่ไม่มีที่สิ้นสุดที่แนะนำใน Ruby 2.6:

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

หวังว่าจะเป็นประโยชน์สำหรับใครบางคน ตัดตัวละครสองสามตัวจากแนวทางที่ดีที่สุดจนถึงตอนนี้และจะอ่านได้มากเมื่อมีการนำช่วงที่ไม่มีที่สิ้นสุดมาใช้เป็นประจำ


โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.