将哈希值与数组按顺序进行比较

Ric*_*wis 0 ruby arrays hash rspec

如果我有以下哈希和数组

hash  = {'i' => 'i', 'av' => 'av', 'deviceName' => 'Genymotionvbox86p'}
array = ['i', 'av', 'Genymotionvbox86p']
Run Code Online (Sandbox Code Playgroud)

我怎么能比较数组中的每个项目以相同的顺序匹配哈希值

到目前为止我有

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

这是失败的,因为我得到

expected av to equal av, instead got i (RSpec::Expectations::ExpectationNotMetError)
Run Code Online (Sandbox Code Playgroud)

我还没到那里,想象循环中的循环不是最好的办法吗?

我想知道如何有效地解决这个问题.

ndn*_*kov 5

失败的原因是因为您将每个数组值与每个哈希值进行比较.要解决这个问题,您可以利用两个数组数组相等的事实,如果它们的所有值按顺序相等:

expect(array).to eq hash.values
Run Code Online (Sandbox Code Playgroud)