mayusculas manejo interpolar funcion convertir contar caracteres cadenas ruby string startswith

manejo - ¿Cómo puedo saber si una cadena comienza con otra cadena en Ruby?



interpolar en ruby (4)

¿Cuál es la mejor manera de encontrar si una cuerda comienza con otra en Ruby (sin rieles)?


Como hay varios métodos presentados aquí, quería saber cuál fue el más rápido. Usando 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

Entonces parece que start_with? Es el más rápido del grupo.

Resultados actualizados con Ruby 2.2.2p95 y una máquina más nueva:

require ''benchmark'' Benchmark.bm do |x| x.report(''regex[]'') { 10000000.times { "foobar"[//Afoo/] }} x.report(''regex'') { 10000000.times { "foobar" =~ //Afoo/ }} x.report(''[]'') { 10000000.times { "foobar"["foo"] }} x.report(''start_with'') { 10000000.times { "foobar".start_with?("foo") }} end user system total real regex[] 4.020000 0.000000 4.020000 ( 4.024469) regex 3.160000 0.000000 3.160000 ( 3.159543) [] 2.930000 0.000000 2.930000 ( 2.931889) start_with 2.010000 0.000000 2.010000 ( 2.008162)


El método mencionado por steenslag es escueto, y dado el alcance de la pregunta, debe considerarse la respuesta correcta. Sin embargo, también vale la pena saber que esto se puede lograr con una expresión regular, que si no estás familiarizado con Ruby, es una habilidad importante para aprender.

Juega con Rubular: http://rubular.com/

Pero en este caso, la siguiente declaración de ruby ​​devolverá verdadero si la cadena de la izquierda comienza con ''abc''. El / A en el literal de expresión regular a la derecha significa ''el comienzo de la cadena''. Juega con rublos: quedará claro cómo funcionan las cosas.

''abcdefg'' =~ //Aabc/


me gusta

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


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

[edit] Esto es algo que no sabía antes de esta pregunta: start_with toma múltiples argumentos.

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