将哈希值与Ruby中相应的数组值进行比较

时间:2015-07-14 22:12:51

标签: arrays ruby hash compare

我已经编写了一个角落,我现在需要将哈希值与数组中相应的元素进行比较。

我有两个相同值的“列表”,以不同的方式排序,它们应该是相同的。有趣的是,当他们不这样做时,我需要确定那些案例。所以基本上我需要检查散列中第一个键值对的第一个值是否与数组的第一个元素相同,同样第二个值是否向第二个元素检查,依此类推,对于整个值集合哈希。

我是Ruby脚本的新手,但是这应该很容易,但是唉......

2 个答案:

答案 0 :(得分:3)

听起来你需要的只是简单的事情:

hash.keys == array

keys应该与Hash中的顺序相同,所以这是将哈希的第一个键与数组的第一个元素进行比较,第二个键与第二个数组元素进行比较。 ..

你也可以将你所说的内容音译成Ruby:

hash.each_with_index.all? { |(k, _), i| k == array[i] }

或者你可以说:

hash.zip(array).all? { |(k, _), e| k == e }

zip版本几乎是each_with_index版本,数组索引基本上折叠为zip

答案 1 :(得分:0)

从技术上讲,哈希不保证有序,所以你假设匹配哈希'每个'索引的值可能并不总是成立。但是,为了回答你的问题,假设h是你的哈希值,而a是你的数组:

list_matches = true
h.values.each_with_index {|v, i| list_matches = list_matches && a[i] == v}

如果list_matches不等于true,那么两个集合中的项目不匹配。