Разница между коллекцией и каждым?

Используя массивы, какое основное различие между коллекцией и каждым? Предпочтение?

some = []

some.collect do {|x| puts x}

some.each do |x|
    puts x
end

Ответ 1

array = [] - это ярлык для определения объекта массива (длинная форма: array = Array.new)

Array#collectArray#map) возвращает новый массив на основе кода, переданного в блоке. Array#each выполняет операцию (определенную блоком) для каждого элемента массива.

Я бы использовал такой сбор:

array = [1, 2, 3]
array2 = array.collect {|val| val + 1}

array.inspect # => "[1, 2, 3]"
array2.inspect # => "[2, 3, 4]"

И каждый такой:

array = [1, 2, 3]
array.each {|val| puts val + 1 }
# >> 2
# >> 3
# >> 4
array.inspect # => "[1, 2, 3]"

Надеюсь, что это поможет...

Ответ 2

collect (или map) будет "сохранять" возвращаемые значения блока do в новом массиве и возвращать его, например:

some = [1,2,3,10]
some_plus_one = some.collect {|x| x + 1}
# some_plus_one == [2,3,4,11]

each выполнит только блок do для каждого элемента и не сохранит возвращаемое значение.