/
enumberable_methods.rb
84 lines (75 loc) · 1.52 KB
/
enumberable_methods.rb
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
module Enumerable
def my_each
return self unless block_given?
for i in self
yield(i)
end
end
def my_each_with_index
return self unless block_given?
for i in 0...length
yield(self[i], i)
end
end
def my_select
return self unless block_given?
new_array = []
my_each { |i| new_array << i if yield(i) }
new_array
end
def my_all?
if block_given?
my_each { |i| return false unless yield(i) }
else
my_each { |i| return false unless i }
end
true
end
def my_any?
if block_given?
my_each { |i| return true if yield(i) }
else
my_each { |i| return true if i }
end
false
end
def my_none?
if block_given?
my_each { |i| return false if yield(i) }
else
my_each { |i| return false if i }
end
true
end
def my_count(num = nil)
c = 0
if block_given?
my_each { |i| c += 1 if yield(i) }
elsif num.nil?
c = length
else
my_each { |i| c += 1 if i == num }
end
c
end
def my_map(code_block)
new_array = []
if code_block
my_each do |i|
new_array << code_block.call(i)
end
return new_array
else
return self
end
end
def my_inject(num = nil)
accumulator = num.nil? ? first : num
my_each { |i| accumulator = yield(accumulator, i) }
accumulator
end
end # end of module
# uses #my_inject method to multiply all elements in list
def multiply_els(list)
list.my_inject(1) { |product, i| product * i }
end