Ruby on Rails: группировка сообщений в блоге к месяцу

Как насчет некоторого простого тестирования? Используемый код ниже:

long start = System.currentTimeMillis();

String a = "a";

String b = "b";

for (int i = 0; i < 10000000; i++) { //ten million times
     String c = a.concat(b);
}

long end = System.currentTimeMillis();

System.out.println(end - start);
  • "a + b" версия, выполняемая в [1 113] 2 500 мс .
  • Эти a.concat(b) выполняемый в [1 114] 1 200 мс .

Тестируемый несколько раз. concat() выполнение версии заняло половину времени в среднем.

Этот результат удивил меня, потому что concat() метод всегда создает новую строку (это возвращается" new String(result)". Известно что:

String a = new String("a") // more than 20 times slower than String a = "a"

, Почему компилятор не был способен к, оптимизируют строковое создание в "+ b" код, зная, что это всегда приводило к той же строке? Это могло избежать нового строкового создания. Если Вы не верите оператору выше, протестируйте на Ваш сам.

5
задан Barry Gallagher 3 July 2009 в 19:24
поделиться

1 ответ

group_by - отличный метод:

контроллер:

def archive
  #this will return a hash in which the month names are the keys, 
  #and the values are arrays of the posts belonging to such months
  #something like: 
  #{ "February" => [#<Post 0xb5c836a0>,#<Post 0xb5443a0>],
  # 'March' => [#<Post 0x43443a0>] }
  @posts_by_month = Posts.find(:all).group_by { |post| post.created_at.strftime("%B") }
end

шаблон представления:

<% @posts_by_month.each do |monthname, posts| %>
<%= monthname %>
<ul>
   <% posts.each do |post| %>
     <li><%= post.title %></li>
   <% end %>
</ul>
<% end %>
31
ответ дан 18 December 2019 в 05:23
поделиться
Другие вопросы по тегам:

Похожие вопросы: