在你的一块Ruby代码中,你已经插入了每行2列的行。因此,最初插入订单中的记录,并在其下插入销售中的记录。如果您需要它们并排放置,则可以在订单和第i行销售中读取第i行,将它们合并为一行4列并插入到CSV中。
my_csv_to_export = CSV.generate do |csv|
header = %w(dates orders dates sales)
csv << header
padding_row = ["", ""]
total_number_of_rows = [orders.size, sales.size].max
# If one array contains more rows than other,
# fill the empty row with the padding_row so that
# the alignment of records in the CSV is preserved.
(0..(total_number_of_rows - 1)).each do |row_index|
current_row = (orders[row_index] || padding_row) + (sales[row_index] || padding_row)
csv << current_row
end
end
如果阵列即订单和销售已经包含在日期的顺序的条目,那么你可以只更换下面两个赋值语句。
header = %w(dates orders sales)
.
.
.
current_row = (orders[row_index] || padding_row) + [(sales[row_index] || padding_row)[1]]
更好的解决方案是从日期到订单和从日期到销售的另一个地图创建地图。然后,日期可用于从订单地图和销售地图中获取订单,前提是格式的日期在两个数组中都是相同的。
my_csv_to_export = CSV.generate do |csv|
header = %w(dates orders sales)
csv << header
// The following code assumes that there is only one order/sale per date.
orders_map = orders.index_by { |order| order[0] } // Use the first column of the array i.e date as the key to the map.
sales_map = sales.index_by { |sale| sale[0] }
unique_dates = (orders_map.keys + sales_map.keys).uniq
unique_dates.each do |date|
csv << [date, orders[date] || "", sales[date] || ""]
end
end
完美的作品Aravind,谢谢!如果我不希望日期重复,那么呢? Like: header =%w(日期订单销售) –
@YannFroment请参阅最新的答案。 –
非常感谢这个更新! –