Es sieht aus wie Sie versuchen, wenn aArray, um herauszufinden, enthält alle Elemente von bArray.
aArray = %w[a b c d]
bArray = %w[a b c z]
(bArray - aArray).empty? # => false
Ich sah genauer hin den ursprünglichen Code an und es ist eine logische Bombe tickt bekam:
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
ich die i = 0
initializer sonst Rubin beschwerten sich über die nicht initialisierten Variablen hinzufügen hatte.
Beachten Sie, dass cmp_array
entweder nil oder false zurückgibt und einen zusätzlichen Test für oder false?
erzwingt, um etwas Nützliches zu tun.
if (cmp_array(%w[ a b c ], %w[ a b c ]).nil?) ...
oder:
if (cmp_array(%w[ a b c ], %w[ a b c d ]).false?) ...
Vergleich zu:
if (cmp_array2(%w[ a b c ], %w[ a b c ])) ...
die konsequent true/false zurückgibt.
Aus Gründen der Übersichtlichkeit und Konsistenz schreiben Sie vielleicht auch das erwartete Verhalten in Englisch aus. Dies sollte helfen, alternative Ansätze zu "paaren". Zum Beispiel kann das genaue Endergebnis von "i" (das nur eine temporäre Variable zu sein scheint) wichtig sein. Oder vielleicht nicht. Alternativ kann erwartet werden, dass die Eingabe früh auseinander geht (falls dies der Fall ist). Oder vielleicht nicht. Das hinzugefügte Detail (z. B. nicht "tue dies") kann auch zu dem Fragetitel befördert werden, um einen besseren Beitrag zu erzeugen. –
In Ruby verwenden Sie normalerweise 'snake_case' anstelle von' camelCase'. –