Производительность с использованием Ruby 'include?'метод - PullRequest
1 голос
/ 25 июня 2011

Хотелось бы узнать, насколько метод include? может повлиять на производительность, если у меня что-то вроде этого:

array = [<array_values>]           # Read above for more information

(0..<n_iterations>).each { |value| # Read above for more information
  array.include?(value)
}

В случаях <array_values> равны 10, 100 и 1.000 и <n_iterations>10, 100, 1000.

Ответы [ 2 ]

12 голосов
/ 25 июня 2011

Используйте Set (или эквивалентно Hash) вместо массива, чтобы include было O(1) вместо O(n).

Или если у вас есть несколько includeДля этого вы можете использовать пересечение массива & или вычитание -, которое создаст временный Hash для эффективного выполнения операции.

1 голос
/ 25 июня 2011

Я думаю, ruby-prof может быть хорошим началом.Тем не менее, эти данные о производительности не будут полезны без того, чтобы сравнивать их с чем-то еще.Например, « производительность этого метода лучше или хуже, чем [какой-либо другой метод]

Также обратите внимание, что, поскольку n_iterations увеличивается больше, чем размер массива, этот код будетвероятно, работать лучше, из-за большого количества #include?звонки.

array.each do |value|
  (0..<n_iterations>).map.include?(value)
end
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...