以下代码比较两个散列:一个以字符串作为值,另一个以数组作为值。如何跳过`zip`中的第一对?
hash1 = {"1"=>"val", "2"=>"val", "3"=>"vall", "4"=>""}
hash2 = {"1"=>[""], "2"=>["value"], "3"=>["val1", "val2"], "4"=>[""]}
unless hash1.zip(hash2).all? { |(_, fv), (_, lv)| fv.empty?^!lv.all?(&:empty?) }
...
end
如果hash1
有一个空字符串,并hash2
具有值或反之亦然,这是错误的。
我需要比较来跳过两个哈希中的第一个元素。我会加with_index
这样做,但我不知道如何添加它,或者如果它是这种情况下的最佳方式。
也许'hash1.zip(hash2).slice(1 ..- 1)'? – mike
你可以使用[Enumerable#each_with_index](http://ruby-doc.org/core-2.2.0/Enumerable.html#method-i-each_with_index):'hash1.zip(hash2).each_with_index.all? {|((_,fv),(_,lv)),i | i.zero? || fv.empty? ^!lv.all?(&:empty?)}#=> true'。 –