лучший способ хранить мою статистику (ruby) - PullRequest
3 голосов
/ 22 февраля 2010

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

Пока что я могу представить себе хэш массива для хранения статистики. Где массив будет содержать структуру статистики по категориям и будет (почти) одинаковым для всех категорий. Кто-нибудь может придумать какое-нибудь лучшее решение с точки зрения

  • легко включить новую категорию
  • легко манипулировать / назначать / рассчитывать все статистические данные
  • легко отображать

моя идея выглядит как

stats = { 'video' = [], 'article' = [], 'webinar' = [] } 
stats_array = ['Total number','Last date added','etc']

и тогда я бы сделал что-то вроде

stats['video'][stats_array.index('Total number')] +=1

Ответы [ 2 ]

3 голосов
/ 22 февраля 2010

Я голосовал за Петр ответ: -)

Вот пример ... (обновлен, чтобы иметь to_s вместо помощника печати, который все равно не был вставлен) ... (обновлен снова для вопроса сортировки / массива) ...

class Stats
  attr_accessor :type, :count, :last_date;
  def initialize t
    @type = t
  end
  def to_s
    "%-9s %4d %s" % [@type, @count, @last_date]
  end
  def <=> other
    [@type, @last_date, @count] <=> [other.type, other.count, other.last_date]
  end
end

all = []
v = Stats.new 'video'
v.count = 12
v.last_date = 'Tuesday'
all << v
a = Stats.new 'article'
a.count = 5
a.last_date = 'Monday'
all << a

puts v
puts a
puts "Ask, and ye shall be sorted..."
puts all.sort
$ ruby r5.rb
video       12 Tuesday
article      5 Monday
Ask, and ye shall be sorted...
article      5 Monday
video       12 Tuesday
$ 
1 голос
/ 22 февраля 2010

Используйте объектно-ориентированное решение! У него небольшие накладные расходы на кодирование, но он позволяет легко расширяться и т. Д. Возможно, создайте класс Statistics, затем класс class ArticleStatistic < Statistics и т. Д. Возможно, вам не понадобится вся эта мощность на раннем этапе, но она чище и более расширяема.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...