Похоже, вы пытаетесь выяснить, содержит ли aArray все элементы bArray.
aArray = %w[a b c d]
bArray = %w[a b c z]
(bArray - aArray).empty? # => false
Я посмотрел на оригинальный код поближе, и у него тикает логическая бомба:
def cmp_array(aArray, bArray)
i = 0
while (i < bArray.length)
if (aArray.include?(bArray[i]) == false) then
return false
end
i += 1
end
end
def cmp_array2(a, b)
(b - a).empty?
end
cmp_array( %w[ a b c ], %w[ a b c ]) # => nil
cmp_array( %w[ a b c ], %w[ c b a ]) # => nil
cmp_array( %w[ a b c ], %w[ a b ]) # => nil
cmp_array( %w[ a b c ], %w[ a b c d ]) # => false
cmp_array( %w[ a b ], %w[ a b c ]) # => false
cmp_array2( %w[ a b c ], %w[ a b c ]) # => true
cmp_array2( %w[ a b c ], %w[ c b a ]) # => true
cmp_array2( %w[ a b c ], %w[ a b ]) # => true
cmp_array2( %w[ a b c ], %w[ a b c d ]) # => false
cmp_array2( %w[ a b ], %w[ a b c ]) # => false
Мне пришлось добавить инициализатор i = 0
, иначе Руби пожаловался на неинициализированную переменную.
Обратите внимание, что cmp_array
возвращает либо ноль, либо false, что заставляет дополнительный тест для nil?
или false?
сделать что-то полезное.
if (cmp_array( %w[ a b c ], %w[ a b c ]).nil?) ...
или
if (cmp_array( %w[ a b c ], %w[ a b c d ]).false?) ...
по сравнению с:
if (cmp_array2( %w[ a b c ], %w[ a b c ])) ...
, который последовательно возвращает истину / ложь.