diff options
author | Richard Schneeman <richard.schneeman@gmail.com> | 2015-04-11 18:10:19 -0500 |
---|---|---|
committer | Richard Schneeman <richard.schneeman@gmail.com> | 2015-04-11 18:10:19 -0500 |
commit | 11e8b46a1296889c9c85472a50c6ad6903c021c9 (patch) | |
tree | bbfd3e9cf9a82ef1a281981384204c59f1989872 /guides | |
parent | 29d40544b12652c64a6325a721dba44697b1004a (diff) | |
parent | f7ba69436acc15da88a94b6af55076d3c7c912ca (diff) | |
download | rails-11e8b46a1296889c9c85472a50c6ad6903c021c9.tar.gz rails-11e8b46a1296889c9c85472a50c6ad6903c021c9.tar.bz2 rails-11e8b46a1296889c9c85472a50c6ad6903c021c9.zip |
Merge pull request #19733 from yuki24/speed-up-levenshtein
Speed up Levenshtein by 50% and reduce 97% of memory usage
Diffstat (limited to 'guides')
-rw-r--r-- | guides/rails_guides/levenshtein.rb | 7 |
1 files changed, 5 insertions, 2 deletions
diff --git a/guides/rails_guides/levenshtein.rb b/guides/rails_guides/levenshtein.rb index 36183fd321..049f633258 100644 --- a/guides/rails_guides/levenshtein.rb +++ b/guides/rails_guides/levenshtein.rb @@ -14,10 +14,13 @@ module RailsGuides d = (0..m).to_a x = nil - str1.each_char.each_with_index do |char1,i| + # avoid duplicating an enumerable object in the loop + str2_codepoint_enumerable = str2.each_codepoint + + str1.each_codepoint.with_index do |char1, i| e = i+1 - str2.each_char.each_with_index do |char2,j| + str2_codepoint_enumerable.with_index do |char2, j| cost = (char1 == char2) ? 0 : 1 x = [ d[j+1] + 1, # insertion |