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
|
module Twitter
module Utils
module_function
# Returns a new array with the concatenated results of running block once for every element in enumerable.
# If no block is given, an enumerator is returned instead.
#
# @param enumerable [Enumerable]
# @return [Array, Enumerator]
def flat_pmap(enumerable, &block)
return to_enum(:flat_pmap, enumerable) unless block_given?
pmap(enumerable, &block).flatten(1)
end
# Returns a new array with the results of running block once for every element in enumerable.
# If no block is given, an enumerator is returned instead.
#
# @param enumerable [Enumerable]
# @return [Array, Enumerator]
def pmap(enumerable)
return to_enum(:pmap, enumerable) unless block_given?
if enumerable.count == 1
enumerable.collect { |object| yield(object) }
else
enumerable.collect { |object| Thread.new { yield(object) } }.collect(&:value)
end
end
end
end
|