Подтвердить что ты не робот

Что такое Ruby-эквивалент для Python "zip" встроенный?

Есть ли какой-либо эквивалент Ruby для встроенной функции zip для Python? Если нет, то какой краткий способ сделать то же самое?

Немного контекста: это произошло, когда я пытался найти чистый способ сделать проверку с участием двух массивов. Если бы у меня было zip, я мог бы написать что-то вроде:

zip(a, b).all? {|pair| pair[0] === pair[1]}

Я также согласился бы на чистый способ сделать это, не имея ничего похожего на zip (где "clean" означает "без явного цикла" ).

4b9b3361

Ответ 1

Ruby имеет функцию zip:

[1,2].zip([3,4]) => [[1,3],[2,4]]

поэтому ваш пример кода:

a.zip(b).all? {|pair| pair[0] === pair[1]}

или, возможно, более кратко:

a.zip(b).all? {|a,b| a === b }

Ответ 2

Не могли бы вы сделать:

a.eql?(b)

Отредактировано, чтобы добавить пример:

a = %w[a b c]
b = %w[1 2 3]
c = ['a', 'b', 'c']

a.eql?(b) # => false
a.eql?(c) # => true
a.eql?(c.reverse) # => false

Ответ 3

Это из спецификации ruby:

it "returns true if other has the same length and each pair of corresponding elements are eql" do
    a = [1, 2, 3, 4]
    b = [1, 2, 3, 4]
    a.should eql(b)
    [].should eql([])
end

Итак, вы должны работать на пример, который вы упомянули.

Если вы не используете целые числа, но настраиваемые объекты, я думаю, вам нужно переопределить eql?.

Спецификация для этого метода находится здесь:

http://github.com/rubyspec/rubyspec/tree/master/1.8/core/array/eql_spec.rb