Найти отличные даты от времени - PullRequest
2 голосов
/ 13 января 2012

У меня есть массив, который выглядит следующим образом:

[Wed Jan 04 21:56:08 UTC 2012, Thu Jan 12 21:58:36 UTC 2012, Thu Jan 12 22:13:24 UTC 2012, Thu Jan 12 22:13:34 UTC 2012]

Каков наилучший способ в Ruby подсчитывать различные дни только в этом массиве?12 января 2012 года появляется три раза, но он должен учитываться только один раз, так как мне важны только месяц / день / год, а не фактическое время, когда значение показывается в массиве.

Таким образом, общее количество дляэтот массив после фильтрации должен быть равен 2 для двух различных значений месяца / дня / года.

Ответы [ 2 ]

3 голосов
/ 13 января 2012

Это строки или объекты DateTime? Предполагая последнее и предполагая, что массив называется datetime_arr ...

date_arr = datetime_arr.map &:to_date
# => [Wed, 04 Jan 2012, Thu, 12 Jan 2012, Thu, 12 Jan 2012, Thu, 12 Jan 2012]

date_arr.uniq!
# => [Wed, 04 Jan 2012, Thu, 12 Jan 2012]

date_arr.length
# => 2

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

0 голосов
/ 13 января 2012

Хотя у вас уже есть принятый ответ, я хотел бы отметить, что если вы перебираете список элементов и хотите сделать что-то один раз для каждой конкретной группировки (например, вывести заголовок), вы должны использовать Enumerable#group_by для удобства:

require 'date'
all_times = 5.times.map{ |i| Time.now + 3600 * 3 * i }
all_times.sort.group_by(&:to_date).each do |day, day_times|
  puts "",day,"-"*40
  day_times.each do |time|
    puts time.strftime(" * %I:%M%P")
  end
end

#=> 2012-01-12
#=> ----------------------------------------
#=>  * 08:56pm
#=>  * 11:56pm
#=> 
#=> 2012-01-13
#=> ----------------------------------------
#=>  * 02:56am
#=>  * 05:56am
#=>  * 08:56am
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...