2016-06-15 3 views
0

Я привязываю, чтобы создать массив дат, основанный на пользовательском вводе даты. Цель состоит в том, чтобы ввести дату ввода пользователем и сгенерировать 16 пар дат (в последовательном порядке).Создайте вложенный массив из существующего массива

Мне удалось вычислить, как сгенерировать даты начала и поместить их в массив, но я не могу понять, как взять этот массив и разбить их на субмассивы (пары дат) ,

Вот код, который я использовал для создания даты начала:

@date_pairs = (@[email protected]_date).step(7).to_a.reverse 

Я попытался создать вложенный массив следующим образом:

@date_pairs = (@[email protected]_date).step(7).to_a.reverse.each { |x| Array.new(x, x-6)} 

Однако я получаю следующую ошибку: нет неявное преобразование даты в целое число

Вот пример того, что я надеюсь получить:

@input_date = 6/15/2016 
@date_pairs = [[6/15/2016, 6/9/2016], [6/8/2016, 6/2/2016], [6/1/2016, 5/24/2016].....] 

Цель состоит в том, чтобы иметь возможность выполнять итерацию по @date_pairs, обращаясь к каждому значению внутри подматрицы.

Я планирую использовать эту концепцию для создания других типов дат пар (т.е. дата пары, разделенные месяцами, годами и т.д.)

Спасибо!

ответ

1

Мне трудно быть уверенным, не зная, как выглядит ваш @input_date, но я думаю, что вы действительно близки. Вероятно, вы получаете эту ошибку, потому что ваш x является экземпляром DateTime, и вы пытаетесь вычесть из него 6 (Integer). Может быть, попробовать вычитанием 6.days вместо этого, например, так:

@date_pairs = (@[email protected]_date).step(7).to_a.reverse.map { |x| [x, x-6.days] } 

отметить также, что Array.new(5, 6) производит [6, 6, 6, 6, 6] - вероятно, не то, что вы хотите здесь.

Надеюсь, что это поможет!

+0

Отлично, спасибо! –

Смежные вопросы