J’essaie de produire un code Ruby qui prendra une chaîne et en retournera une nouvelle, avec un nombre x de caractères supprimé de sa fin – il peut s’agir de lettres, de chiffres, d’espaces, etc.
Ex: donné la chaîne suivante
a_ssortingng = "a1wer4zx"
J’ai besoin d’un moyen simple pour obtenir la même chaîne, moins – disons – les 3 derniers caractères. Dans le cas ci-dessus, ce serait “a1wer”. La façon dont je le fais maintenant semble très compliquée:
an_array = a_ssortingng.split(//,(a_ssortingng.length-2)) an_array.pop new_ssortingng = an_array.join
Des idées?
Que dis-tu de ça?
s[0, s.length - 3]
Ou ca
s[0..-4]
modifier
s = "abcdefghi" puts s[0, s.length - 3] # => abcdef puts s[0..-4] # => abcdef
Utilisez quelque chose comme ceci:
s = "abcdef" new_s = s[0..-2] # new_s = "abcde"
Voir la méthode slice
ici: http://ruby-doc.org/core/classes/Ssortingng.html
Une autre option consiste à obtenir la liste des chars
de la chaîne, à take
caractères x et join
revenir à une chaîne:
[13] pry(main)> 'abcdef'.chars.take(2).join => "ab" [14] pry(main)> 'abcdef'.chars.take(20).join => "abcdef"
Une autre option pourrait être d’utiliser la méthode des slice
a_ssortingng = "a1wer4zx" a_ssortingng.slice(0..5) => "a1wer4"
Documentation: http://ruby-doc.org/core-2.5.0/Ssortingng.html#method-i-slice
si vous en avez besoin dans des rails, vous pouvez utiliser en premier ( code source )
s = '1234567890' x = 4 s.first(s.length - x) # => "123456"
il y a aussi le dernier ( code source )
s.last(2) # => "90"
ou bien vérifier de / à