174 votes

Comment savoir si une chaîne commence par une autre chaîne en Ruby?

Quel est le meilleur moyen de savoir si une chaîne commence par une autre en Ruby (sans rails)?

280voto

steenslag Points 29662
 puts 'abcdefg'.start_with?('abc')  #=> true
 

[edit] C'est quelque chose que je ne savais pas avant cette question: start_with prend plusieurs arguments.

 'abcdefg'.start_with?( 'xyz', 'opq', 'ab')
 

60voto

haslo Points 337

Comme il existe plusieurs méthodes présentées ici, je voulais savoir laquelle était la plus rapide. Utilisation de Ruby 1.9.3p362:

 irb(main):001:0> require 'benchmark'
=> true
irb(main):002:0> Benchmark.realtime { 1.upto(10000000) { "foobar"[/\Afoo/] }}
=> 12.477248
irb(main):003:0> Benchmark.realtime { 1.upto(10000000) { "foobar" =~ /\Afoo/ }}
=> 9.593959
irb(main):004:0> Benchmark.realtime { 1.upto(10000000) { "foobar"["foo"] }}
=> 9.086909
irb(main):005:0> Benchmark.realtime { 1.upto(10000000) { "foobar".start_with?("foo") }}
=> 6.973697
 

Il semble donc que start_with? est le plus rapide du groupe.

4voto

pakeha Points 1207

La méthode mentionnée par steenslag est laconique, et compte tenu de la portée de la question, il devrait être considéré comme la réponse correcte. Cependant, il est également utile de savoir que cela peut être réalisé avec une expression régulière, qui, si vous n'êtes pas déjà familier avec Ruby, est une compétence importante à apprendre.

Avoir un jeu avec Rubular: http://rubular.com/

Mais dans ce cas, la suite ruby retournera true si la chaîne de caractères sur la gauche commence avec "abc". Le \A dans la regex littéral sur la droite signifie "le début de la chaîne". Avoir un jeu avec rubular - il deviendra clair comment les choses fonctionnent.

'abcdefg' =~  /\Aabc/ 

2voto

the Tin Man Points 69148

J'aime

 if ('string'[/^str/]) ...
 

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X