En Ruby 1.9.3 (y probablemente en versiones anteriores, no estoy seguro), estoy tratando de descubrir por qué el método de división de Ruby's String # me está dando ciertos resultados. Los resultados que obtengo parecen contraintuitivos de lo que esperaría. Aquí hay un ejemplo:Cadena de longitud cero que se devuelve desde String # split
"abcabc".split("b") #=> ["a", "ca", "c"]
"abcabc".split("a") #=> ["", "bc", "bc"]
"abcabc".split("c") #=> ["ab", "ab"]
Aquí, el primer ejemplo devuelve exactamente lo que esperaría.
Pero en el segundo ejemplo, estoy confundido sobre por qué #split devuelve una cadena de longitud cero como primer valor de la matriz devuelta. ¿Cuál es el razonamiento para esto? Esto es lo que esperaría en su lugar:
"abcabc".split("a") #=> ["bc", "bc"]
Y a lo largo de la misma línea, ¿cómo es que no hay detrás de cadena de longitud cero devuelto en el tercer ejemplo? Si el segundo ejemplo devuelve una cadena de longitud cero como su primer valor, entonces el último ejemplo debería devolver el mismo valor que el último.
Enlighten me, ¿qué es lo que me falta aquí?
EDIT: Al ver más en esto, me doy cuenta por qué este es el comportamiento predeterminado y por qué mi pensamiento es completamente incorrecto. Si tuviéramos que ir a través de un archivo CSV, por ejemplo, dividir en cada columna, nuestros datos se descartarían porque las columnas principales vacías serían ignoradas.
También es importante tener en cuenta que esta pregunta no está relacionada solo con Ruby: estoy aprendiendo que muchos otros lenguajes se comportan exactamente de la misma manera. Simplemente estaba usando Ruby cuando supe de esto.
No debe dividir CSV en comas. Le dará malos resultados en cualquier cadena entrecomillada con una coma incrustada. En su lugar, use el módulo CSV incorporado de Ruby, que hará lo correcto. –
@the tin man: Entendido, solo hablaba en generalidades. ¡Gracias! – Threeve