Usando la clase CSV::Table de Ruby por primera vez, me encontré con este comportamiento, que me parece extraño:
require 'csv' r0 = CSV::Row.new(['a','b','c'], [], true) r1 = CSV::Row.new(['a','b','c'], [10,11,12]) r2 = CSV::Row.new(['c','b','a'], [22,21,20]) t = CSV::Table.new([r0,r1,r2]) t.to_csv # Expected Output: # => "a,b,c\n10,11,12\n20,21,22\n" # Actual Output: # => "a,b,c\n10,11,12\n22,21,20\n"Supuse que dado que cada fila tiene encabezados definidos, la tabla respetaría esos encabezados, pero parece ignorarlos. Mirando los documentos, no veo una manera de ordenar todas las filas de manera consistente. ¿Hay alguna opción o método que no veo?
Es bastante fácil ordenar las cosas de manera consistente antes de crear las filas, claro, pero también es bastante fácil prescindir de la clase de tabla csv por completo: esperaba un poco más de pulido de una clase stdlib.
Los documentos de la Table dicen "Se supone que todas las filas tienen los mismos encabezados". Podemos ver que, si no se proporciona la palabra clave headers: entonces los encabezados se toman de la primera fila .
# csv/table.rb class CSV class Table # Constructs a new CSV::Table from +array_of_rows+, which are expected # to be CSV::Row objects. All rows are assumed to have the same headers. def initialize(array_of_rows, headers: nil) # .. unless @headers # .. @headers = @table.first.headers