【问题标题】:Compare hash values with corresponding array values in Ruby将哈希值与 Ruby 中对应的数组值进行比较
【发布时间】:2015-07-14 22:12:50
【问题描述】:

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

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

我对 Ruby 脚本有点陌生,但是虽然这应该很容易,但是唉....

【问题讨论】:

  • 你能添加一个你需要的例子吗?
  • 是这样的吗? {a:2,b:3}.to_a == [[:a,2],[:b,3]] 可以举个例子
  • 欢迎来到 Stack Overflow。虽然你的描述很好,但它并没有真正告诉我们任何事情。我们需要查看您的数据样本,向我们展示您的尝试,更重要的是,解释您真正想要做什么,因为这听起来像是XY problem
  • 谢谢你,很抱歉没有包括例子。挪威已经过了午夜,我已经尝试用一些自制软件来提高我的脚本编写技能;)我看到这里至少提出了一个,可能还有几个可行的解决方案,非常感谢!跨度>

标签: arrays ruby hash compare


【解决方案1】:

听起来你只需要一些简单的东西:

hash.keys == array

keys 的出现顺序应该与它们在哈希中的顺序相同,因此这是将哈希的第一个键与数组的第一个元素进行比较,将第二个键与第二个数组元素进行比较,...

你也可以像这样将你所说的音译成 Ruby:

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

或者你可以说:

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

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

【讨论】:

  • 谢谢!因为我对哈希值(按键排序)与数组值不同的情况感兴趣,所以 hash.values != array 成功了!
  • 在这种情况下,如果您更喜欢它们,也可以将其他两个切换为使用 any?!=
【解决方案2】:

从技术上讲,hash 不能保证是有序的,因此您在 hash 的“每个”索引处匹配值的假设可能并不总是成立。但是,为了回答您的问题,假设 h 是您的哈希,a 是您的数组:

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

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

【讨论】:

猜你喜欢
  • 2019-03-03
  • 1970-01-01
  • 1970-01-01
  • 2012-03-24
  • 1970-01-01
  • 2015-05-13
  • 2012-10-25
  • 1970-01-01
  • 2016-08-06
相关资源
最近更新 更多