Ruby idiome pour la sous-chaîne à partir de l'index jusqu'à la fin de la chaîne
Demandais juste si il y a un Rubis idiome pour l'extraction d'une sous-chaîne à partir d'un index jusqu'à la fin de la chaîne. Je sais de str[index..-1]
qui fonctionne par le passage d'un objet de la plage à la String
's []
méthode, mais c'est un peu maladroit. En python, par exemple, vous pourriez écrire str[index:]
qui revient implicitement à vous obtenir le reste de la chaîne.
Exemple:
s = "hello world"
s[6..-1] # <-- "world"
Est-il rien de plus agréable que de s[6..-1]
?
- Je pense explicitement est plus agréable que de implicity dans ce cas.
- Pourquoi est-Gamme un bruit sourd à cet égard?
- Qu'entendez-vous avec le bruit sourd?
- Désolé, j'ai mélangé jusqu'vous avec le propriétaire de cette question.
- Je pense qu'il est maladroit simplement parce que le -1 de l'indice n'est pas super intuitif.
- Il est aussi maladroit, parce que
6..-1
est un vide de la gamme. :-/s[0..5]
peut être comprise comme(0..5).map{|i| s[i]}.join
mais(6..-1).map{|i| s[i]}.join
est une chaîne vide.
Vous devez vous connecter pour publier un commentaire.
Je pense qu'il n'est pas.
Il semble que
Range
est la meilleure façon de le faire.Range
(la façon dont je l'ai dans la question) est la meilleure façon de le faire?Ici est "plus agréable" si vous le souhaitez. Vous pouvez étendre ruby classe String et ensuite utiliser cette méthode dans votre code. Par exemple:
Et puis:
Pour obtenir la chaîne de caractères à partir d'une gamme:
Toutefois, si vous voulez juste pour obtenir le dernier mot:
s[5..s.length - 1]
Vous pouvez étendre la
String
classe. Vous ne savez pas si c'est un rubis idiome si:n
. Pas la dernièren
caractères.De Rails
activesupport
de la bibliothèque (qui peut être installé comme un bijou indépendant de Rails) ajoute unfrom
méthode de cordes:https://api.rubyonrails.org/classes/String.html#method-i-from
Ruby 2.6 introduit d'interminables plages de, qui, fondamentalement, supprimer la nécessité d'avoir à indiquer la fin de l'index. Dans votre cas, vous pouvez le faire: