2016-09-02 12 views
0

私は、配列内の各アイテムは、同じ順序でハッシュ値をは順に配列に対するハッシュ値を比較する

これまで一致していることを比較することができるか、以下のハッシュと配列

hash = {'i' => 'i', 'av' => 'av', 'deviceName' => 'Genymotionvbox86p'} 
array = ['i', 'av', 'Genymotionvbox86p'] 

を持っている場合私はこれは私が得るよう

array.each do |value| 
    hash.each do |k, v| 
    expect(v).to eq(value), "expected #{k} to equal #{v}, instead got #{value}" 
    end 
end 

を失敗している

expected av to equal av, instead got i (RSpec::Expectations::ExpectationNotMetError) 

まだありません。ループ内のループは、どちらの方法でも最適ではないと想像してください。

として評価すべてのヘルプは効率的に使用すると、すべてのハッシュ値を持つすべての配列値を比較するため、これは失敗した理由は、この

おかげ

答えて

1

あなたが本当に項目別に比較したい場合は、当然のことに気づきましたループ内のループは移動する方法ではありません。両方の構造を反復するには、単一のループが必要です。そのために

、あなたは、例えば、ハッシュや配列を組み合わせることが、zipを使用することができます。

hash.zip(array).each do |(hash_key, hash_value), array_item| 
    expect(hash_value).to eq array_item 
end 

か、インデックスを使用してに頼ることができます。

hash.each_with_index do |(k, v), i| 
    expect(v).to eq array[i] 
end 
5

にアプローチする方法を知っていただきたいと思います。これを解決するには、注文内のすべてのそれらの値が等しい場合は2つの配列の配列が同じであるという事実を利用することができます。

expect(array).to eq hash.values 
0

どのようにできました配列内の各項目が同じ順序で の値と一致するかどうかを比較する

これはいかがですか?

> array == hash.values 
#=> true 
> array = ["i", "Genymotionvbox86p", "av"] # change the order 
> array == hash.values 
#=> false 
関連する問題