this works if use alphabetize(a, true) or alphabetize(a):
def alphabetize(arr, rev=false) if rev == true arr.sort.reverse! else arr.sort! end end
but won't work default case when enter arr parameter, alphabetize(a) or alphabetize(a, true) works alphabetize(a, true):
def alphabetize(arr, rev=false) arr.sort! if rev == true arr.sort.reverse! end end
could explain why?
the method array#sort!
(notice bang) performs in-place sort, means original array gets sorted.
array = [1, 3, 4, 5, 2] array.sort! #=> [1, 2, 3, 4, 5] array #=> [1, 2, 3, 4, 5]
the method array#sort
(no bang) not change original array, instead returns new array sorted.
array = [1, 3, 4, 5, 2] array.sort #=> [1, 2, 3, 4, 5] array #=> [1, 3, 4, 5, 2]
so problem @ line 4 reverses new array other original one.
p.s. before write down code, think expect code do. should code modify original array?
if answer yes, code should be
# convention, in-place modification method names end ! def alphabetize!(arr, rev=false) arr.sort! # don't use rev == true. it's redundant. arr.reverse! if rev arr end
if answer no, then
def alphabetize(arr, rev=false) new_array = arr.sort # think why i'm using in-place reverse here. new_array.reverse! if rev new_array end