tengo una matriz:¿Cómo convertir una matriz de cadenas en una cadena separada por comas?
array = ["10", "20", "50", "99"]
y quiero convertirlo en una simple lista separada por comas cadena como esta:
"10", "20", "50", "99"
tengo una matriz:¿Cómo convertir una matriz de cadenas en una cadena separada por comas?
array = ["10", "20", "50", "99"]
y quiero convertirlo en una simple lista separada por comas cadena como esta:
"10", "20", "50", "99"
["10", "20", "50","99"].map(&:inspect).join(', ') # => '"10", "20", "50", "99"'
aquí:
array.map {|str| "\"#{str}\""}.join(',')
obtuve esta salida => "\" 10 \ ", \" 20 \ ", \" 50 \ ", \" 99 \ "" – Kashiftufail
Esa salida es correcta. Las barras invertidas simplemente indican que es una cita literal, no una cita de sintaxis. – tadman
@ali: esa es la salida correcta. el '\' es el carácter de escape así que '\" 'representa el caracter' "' mientras que el simple '" 'al principio y al final es el delimitador de cadena. Probablemente está imprimiendo el resultado con' px' que es equivalente a 'puts x.inspect', intente' puts x' en su lugar –
array.join(',')
casi hacer Lo que quieras; no retendrá las comillas alrededor de los valores ni los espacios posteriores.
Para conservar las comillas y espacios: array.map{|item| %Q{"#{item}"}}.join(', ')
Esto imprimirá "\"10\", \"20\", \"50\", \"99\""
. Las citas escapadas son necesarias suponiendo que la pregunta de hecho requiere una sola cadena.
Documentación en el %Q
: string literals.
Usted podría utilizar inspect
como suggested in another answer, yo diría que es la preferencia personal. No lo haría, mire el source code para eso y elíjalo usted mismo.
Útil a un lado: array.to_sentence
le dará una salida de estilo "1, 2, 3 y 4", ¡que puede ser agradable!
Varias respuestas han ofrecido soluciones utilizando #map
, #inspect
, #join
. Todos ellos fallan al obtener ciertos detalles de la codificación CSV correctos para casos extremos que involucran comas incrustadas y/o delimitadores de cadenas en los elementos.
Probablemente sea una mejor idea usar la clase stdlib CSV y luego hacer la suya.
irb> require 'csv'
=> true
irb> a = [10,'1,234','J.R. "Bob" Dobbs',3.14159]
=> [10, "1,234", "J.R. \"Bob\" Dobbs", 3.14159]
irb> puts a.to_csv
10,"1,234","J.R. ""Bob"" Dobbs",3.14159
Las soluciones map.join son suficientes si esta codificación no tiene que preocuparse por delimitadores embebidos, o debe usarse únicamente para alguna representación interna, pero se producirá un error si la generación de datos para el intercambio con otros programas que esperan Valores separados por comas (CSV) como una representación generalmente comprendida.
'map {| v | v.to_s.inspect} 'manejaría ambos valores enteros y cadenas. – tadman
¿Qué sucede cuando los elementos de la matriz contienen '" '? – dbenhur
' ["10", ''] mapa (&: inspeccionar) .join (',') # => '"10", ""' ' – sczizzo