2010-12-04 1 views
0
while(i < bArray.length) 
    if(aArray.include?(bArray[i]) == false) then 
    return false 
    end 
    i+=1 
end 

私は上記を書いていますが、私はそれが醜いと肥大していることがわかります。これを1つのステートメントで行うには、きれいにカットされた方法が必要です。これをシングルパスで行いますか?

+1

明快さと一貫性のために、予想される動作を英語で書き出すこともできます。これは、以下の代替アプローチを「マッチング」するのに役立ちます。例えば、 'i'(これはちょうど一時変数と思われる)の正確な最終結果が重要かもしれません。そうでないかもしれません。あるいは、入力が早く発散すると予想される場合もあります。そうでないかもしれません。追加された詳細(「do this」ではなく)は、より良い投稿を作成するために質問タイトルに昇格させることもできます。 –

+0

Rubyでは、通常は 'camelCase'ではなく' snake_case'を使います。 –

答えて

6

これは同等でなければなりません:あなたはaArrayかどうかを確認しようとしているように見えます

bArray.all? { |item| aArray.include?(item) } 
+0

は 'return'を残しません。私はcharがそこになければfalseを返します。 – Skizit

+0

ああ、それは理にかなっています。私は自分の答えを更新しました。 –

+0

複数のユーザーが同じソリューションを同時に使用する場合は、常に良い兆候です。これは、通常、どちらかと言えばかなり良いか、微妙に間違った解決策です:-) –

4
bArray.all?(&aArray.method(:include?)) 
5

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 ])) ... 

関連する問題