web-dev-qa-db-fra.com

Ruby idiome pour la sous-chaîne de l'index jusqu'à la fin de la chaîne

Je me demande simplement s'il y a un id = Ruby pour extraire une sous-chaîne d'un index jusqu'à la fin de la chaîne. Je connais str[index..-1] qui fonctionne en passant un objet range au String's [] méthode mais c'est un peu maladroit. En python, par exemple, vous pouvez écrire str[index:] qui vous obtiendrait implicitement le reste de la chaîne.

Exemple:

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

Y a-t-il quelque chose de plus agréable que s[6..-1]?

38
Sherwin Yu

Je pense que non.

Il semble que Range soit la meilleure façon de le faire.

6
Paul Chechetin

Voici "plus agréable" si vous le souhaitez. Vous pouvez étendre la classe Ruby String, puis utiliser cette méthode dans votre code. Par exemple:

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

Puis:

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

Pour obtenir la chaîne d'une plage:

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

Cependant, si vous souhaitez simplement obtenir le dernier mot:

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

Vous pouvez étendre la classe String. Je ne sais pas si c'est un idiome Ruby cependant:

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

La bibliothèque activesupport de Rails (qui peut être installée comme une gemme indépendante de Rails) ajoute une méthode from aux chaînes:

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

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

1
MothOnMars

Ruby 2.6 a introduit gammes sans fin , ce qui élimine fondamentalement la nécessité d'avoir à spécifier l'index de fin. Dans votre cas, vous pouvez faire:

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