web-dev-qa-db-ja.com

Rubyインデックスから文字列の終わりまでの部分文字列のイディオム

インデックスからサブストリングを抽出するためのRubyイディオムがあるかどうか疑問に思う。範囲オブジェクトをStringstr[index..-1]メソッドに渡すことで機能する[]を知っているたとえば、Pythonでは、str[index:]を記述して、暗黙的に残りの文字列を取得できます。

例:

s = "hello world"
s[6..-1] # <-- "world"

s[6..-1]よりも優れたものはありますか?

38
Sherwin Yu

そうではないと思います。

Rangeがより良い方法のようです。

6
Paul Chechetin

ご希望の場合はこちらをご覧ください。 Ruby Stringクラスを拡張し、このメソッドをコードに使用できます。例:

class String
  def last num
    self[-num..-1]
  end
end

その後:

s = "hello world"
p s.last(6)
6

範囲から文字列を取得するには:

s = 'hello world'
s[5..s.length - 1] # world

ただし、最後のWordを取得するだけの場合:

'hello world'.split(' ').last # world
5
Simon Tsang

Stringクラスを拡張できます。 Rubyイディオムかどうかはわかりませんが:

class String
  def last(n)
    self[(self.length - n)..-1]
  end
end
2
Flauwekeul

Railsのactivesupportライブラリ(Railsから独立したgemとしてインストール可能)は、文字列にfromメソッドを追加します。

> s = "hello world"
"hello world"
> s.from(6)
"world"

https://api.rubyonrails.org/classes/String.html#method-i-from

1
MothOnMars

Ruby 2.6では 無限の範囲 が導入され、基本的に終了インデックスを指定する必要がなくなりました。あなたの場合、次のことができます:

s = "hello world"
s[6..]
1
vicentazo