while(i < bArray.length)
if(aArray.include?(bArray[i]) == false) then
return false
end
i+=1
end
私は上記を書いていますが、私はそれが醜いと肥大していることがわかります。これを1つのステートメントで行うには、きれいにカットされた方法が必要です。これをシングルパスで行いますか?
while(i < bArray.length)
if(aArray.include?(bArray[i]) == false) then
return false
end
i+=1
end
私は上記を書いていますが、私はそれが醜いと肥大していることがわかります。これを1つのステートメントで行うには、きれいにカットされた方法が必要です。これをシングルパスで行いますか?
これは同等でなければなりません:あなたはaArrayかどうかを確認しようとしているように見えます
bArray.all? { |item| aArray.include?(item) }
は 'return'を残しません。私はcharがそこになければfalseを返します。 – Skizit
ああ、それは理にかなっています。私は自分の答えを更新しました。 –
複数のユーザーが同じソリューションを同時に使用する場合は、常に良い兆候です。これは、通常、どちらかと言えばかなり良いか、微妙に間違った解決策です:-) –
bArray.all?(&aArray.method(:include?))
:
while i < bArray.length
return false unless aArray.include?(bArray[i])
i += 1
end
は、ここで私は同等であるべきだと思うワンライナーです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
私はそうRubyは初期化されていない変数不満i = 0
初期化子を追加する必要がありました。
cmp_array
は、nilまたは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 ])) ...
。
明快さと一貫性のために、予想される動作を英語で書き出すこともできます。これは、以下の代替アプローチを「マッチング」するのに役立ちます。例えば、 'i'(これはちょうど一時変数と思われる)の正確な最終結果が重要かもしれません。そうでないかもしれません。あるいは、入力が早く発散すると予想される場合もあります。そうでないかもしれません。追加された詳細(「do this」ではなく)は、より良い投稿を作成するために質問タイトルに昇格させることもできます。 –
Rubyでは、通常は 'camelCase'ではなく' snake_case'を使います。 –