【问题标题】:Comparing two arrays of hashes using sets in Ruby在 Ruby 中使用集合比较两个哈希数组
【发布时间】:2012-08-03 21:05:05
【问题描述】:

按照SO,我正在尝试比较两个哈希数组:

db = [
{:foo => "bar", :stack => "overflow", :num => 0.5},
{:foo => "bar", :stack => "underlow", :num => 0.5},
{:foo => "bar", :stack => "overflow", :num => 0.1}
]

csv = [
{:foo => "bar", :stack => "overflow", :num => 0.5},
{:foo => "bar", :stack => "underlow", :num => 0.1},
]
 

我正在尝试使用 Ruby Set (db_set = Set[db], csv_set = Set[csv]) 来比较两者,使用 - (db_set - csv_set) 和 & (db_set & csv_set) 但这些似乎没有执行比较操作。

我误解了Set 的用法吗?如何比较这两个哈希数组?

【问题讨论】:

  • 是比较(这个数组小于那个数组)还是进行集合操作?
  • 我想执行集合操作,即返回两者共有的hahses,而不是一个或另一个等

标签: ruby-on-rails ruby


【解决方案1】:

这里不需要使用集合。看来你会很好地使用数组运算符。

db = [
  {:foo => "bar", :stack => "overflow", :num => 0.5},
  {:foo => "bar", :stack => "underlow", :num => 0.5},
  {:foo => "bar", :stack => "overflow", :num => 0.1}
]

csv = [
  {:foo => "bar", :stack => "overflow", :num => 0.5},
  {:foo => "bar", :stack => "underlow", :num => 0.1},
]

db - csv # => [{:foo=>"bar", :stack=>"underlow", :num=>0.5}, {:foo=>"bar", :stack=>"overflow", :num=>0.1}]
db & csv # => [{:foo=>"bar", :stack=>"overflow", :num=>0.5}]

【讨论】:

  • 嗯 - 我最初在我的数据(db = 339 哈希和 csv = 10)和 (db - csv).count = 339 上尝试了这个(当我知道 10 个 csv 哈希在 db 中时。我将更仔细地检查我的数据...
  • 也许在某些散列中键是符号,而在另一些中是字符串。他们不会平等。 (只是猜测)。
  • 我一直在用 db[0] == csv[0] 进行测试,这是真的,很奇怪
  • 原来我的 db[0][:num].class= BigDecimal 而 csv[0][:num].class= Float - 修复允许我使用 - 和 &
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-07-20
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多