mirror of
https://github.com/rails/rails.git
synced 2022-11-09 12:12:34 -05:00
Little perfomance fix for Array#split.
Calculating ------------------------------------- before 40.770k i/100ms after 58.464k i/100ms ------------------------------------------------- before 629.568k (± 5.0%) i/s - 3.180M after 1.159M (± 4.5%) i/s - 5.788M
This commit is contained in:
parent
e007afd3cd
commit
ffb1df52c1
2 changed files with 14 additions and 10 deletions
|
@ -100,17 +100,13 @@ class Array
|
|||
results
|
||||
end
|
||||
else
|
||||
results, arr = [[]], self.dup
|
||||
until arr.empty?
|
||||
if (idx = arr.index(value))
|
||||
results.last.concat(arr.shift(idx))
|
||||
arr = self.dup
|
||||
result = []
|
||||
while (idx = arr.index(value))
|
||||
result << arr.shift(idx)
|
||||
arr.shift
|
||||
results << []
|
||||
else
|
||||
results.last.concat(arr.shift(arr.size))
|
||||
end
|
||||
end
|
||||
results
|
||||
result << arr
|
||||
end
|
||||
end
|
||||
end
|
||||
|
|
|
@ -123,4 +123,12 @@ class SplitTest < ActiveSupport::TestCase
|
|||
assert_equal [[], [2, 3, 4], []], a.split { |i| i == 1 || i == 5 }
|
||||
assert_equal [1, 2, 3, 4, 5], a
|
||||
end
|
||||
|
||||
def test_split_with_repeated_values
|
||||
a = [1, 2, 3, 5, 5, 3, 4, 6, 2, 1, 3]
|
||||
assert_equal [[1, 2], [5, 5], [4, 6, 2, 1], []], a.split(3)
|
||||
assert_equal [[1, 2, 3], [], [3, 4, 6, 2, 1, 3]], a.split(5)
|
||||
assert_equal [[1, 2], [], [], [], [4, 6, 2, 1], []], a.split { |i| i == 3 || i == 5 }
|
||||
assert_equal [1, 2, 3, 5, 5, 3, 4, 6, 2, 1, 3], a
|
||||
end
|
||||
end
|
||||
|
|
Loading…
Reference in a new issue