que quiero dividir una cadena supresión de todos los campos nulosSeparar una cadena supresión de todos los campos nulos
Comando:
",1,2,,3,4,,".split(',')
Resultado:
["", "1", "2", "", "3", "4", ""]
esperado:
["1", "2", "3", "4"]
¿Como hacer esto?
Editar
Ok. Solo para resumir todas las buenas preguntas publicadas.
Lo que quería es que el método de división (u otro método) no generara cadenas vacías. Parece que no es posible.
Por lo tanto, la solución es un proceso de dos pasos: dividir la cadena como de costumbre, y de alguna manera eliminar las cadenas vacías de la matriz resultante.
La segunda parte es exactamente this question (y su duplicate)
Así que usaría
",1,2,,3,4,,".split(',').delete_if(&:empty?)
La solución propuesta por Nikita Rybak y por user229426 es utilizar el método de rechazo. De acuerdo con docs rechazo devuelve una nueva matriz. Mientras que el método delete_if es más eficiente ya que no quiero una copia. Usar select propuesto por Mark Byers es aún más ineficiente.
steenslag propone sustituir comas con el espacio y luego usar dividida por el espacio:
",1,2,,3,4,,".gsub(',', ' ').split(' ')
En realidad, the documentation dice que el espacio es en realidad un espacio en blanco. Pero los resultados de "split (/ \ s /)" y "split ('')" no son lo mismo. ¿Porque eso?
Mark Byers propuso otra solución, simplemente usando expresiones regulares. Parece que esto es lo que necesito. Pero esta solución implica que debes ser un maestro de regexp. ¡Pero esta es una gran solución! Por ejemplo, si necesito espacios para ser separadores, así como cualquier símbolo que no sea alfanumérico que puedo volver a escribir esto a
",1,2, ,3 3,4 4 4,,".scan(/\w+[\s*\w*]*/)
el resultado es:
["1", "2", "3 3", "4 4 4"]
Pero de nuevo las expresiones regulares son muy poco intuitivo y necesitan una experiencia.
Resumen
espero esa fracción de trabajar con espacios en blanco, como si los espacios blancos eran una coma o incluso la expresión regular. Espero que no produzca cadenas vacías. Creo que esto es un error en Ruby o mi malentendido.
He aquí una pregunta de la comunidad.
No es un experto en ruby, pero parece que http://stackoverflow.com/questions/3774509/eliminating-nil-lines es la misma pregunta más o menos, donde asigna la eliminación en la matriz, hable sobre el tiempo. – Novikov
Sí, lo es. Gracias – Vanuan
También me resulta extraño que se devuelva una cadena vacía ('" "') cuando dos valores no coinciden con la Regexp en una fila. – NotAnAmbiTurner