簡體   English   中英

什么是Python的“zip”內置的Ruby等價物?

[英]What is a Ruby equivalent for Python's “zip” builtin?

Python的內置zip功能是否有Ruby等價物? 如果沒有,做同樣事情的簡潔方法是什么?

一點上下文:當我試圖找到一個干凈的方法來檢查涉及兩個數組時,就會出現這種情況。 如果我有zip ,我可以寫下這樣的東西:

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

我也接受一種干凈的方式來做這個沒有類似zip東西(其中“干凈”意味着“沒有明確的循環”)。

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 }

你不能這樣做:

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

這是來自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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM