Измените его на:
def my_select(collection)
count = 0
newColl = []
while collection.length > count
if (collection[count] % 2 == 0)
result = yield collection[count] # yield first
newColl.push(collection[count]) if result # then push to newColl if required
end
count += 1
end
newColl
end
arr = [1, 2, 3, 4, 5]
my_select(arr) {|num| num.even? }
#=> [2,4]
Хотя ваша коллекция newColl
здесь в значительной степени бесполезна.
Редактировать : поскольку вы упоминали о воссозданииselect
, это может быть альтернативой:
def my_select(collection)
# it iterates on the collection and filters the item for which the block return true, at the end, I compact the collection to remove nils
collection.map do |item|
item if yield(item)
end.compact
end
# or
def my_select(collection)
# start with a blank array
coll = []
# iterate on collection
collection.each do |item|
# insert all those items for which the block returns true by yield(item)
coll << item if yield(item)
end
# return the array
coll
end
arr = [1, 2, 3, 4, 5]
my_select(arr) {|num| num.even? }
#=> [2, 4]