【问题标题】:Compare two hashes, then delete if ID not present比较两个哈希,如果 ID 不存在则删除
【发布时间】:2011-08-26 17:36:29
【问题描述】:

我有两个哈希,一个看起来像这样:

{:id => "SG_5viWPcG0SLvszXbBxogLkT_51.514568_-0.126244@1300740367",
 :name => "Shellys Shoes",
 :lat => 51.5145683289,
 :lng => -0.1262439936}

这只是一条记录,大约有 80 条,

我拥有的第二个哈希是:

{"id":"SG_2zNWLdG9147g2ROvNWpDHr_51.512360_0.124480@1300740823",
"lat":51.5123596191,
"lng":-0.1244800016}

上面的哈希再次只是一条记录,但是它是上面哈希的产物,经过一个不返回所有记录的API,只返回有效记录,我想要做的是将顶部哈希与底部的并删除底部哈希中不存在的所有记录,

例如,如果 id:SG_5viWPcG0SLvszXbBxogLkT_51.514568_-0.126244@1300740367 不在第二个哈希中,则删除该记录,

我可以比较哈希值,但如果 ID 不存在,则看不到如何删除?

谢谢大家!

编辑: 这些是返回值....

{"points":[{"id":"SG_75oKOgvgFPLjwmdyAKA2rq_51.512825_-0.124655@1300740283","lat":51.5128250122,"lng":-0.1246550009},{"id":"SG_0Sz9CBF5t70tdAffTKYNSg_51.512360_-0.124388@1300740807","lat":51.5123596191,"lng":-0.1243880019},{"id":"SG_2zNWLdG9147g2ROvNWpDHr_51.512360_-0.124480@1300740823","lat":51.5123596191,"lng":-0.1244800016},{"id":"SG_5PvBx89sLPgplapegVJDFv_51.513100_-0.124809@1300740049","lat":51.5130996704,"lng":-0.1248089969},{"id":"SG_4luyHFi5R2f1w3cpjT61ik_51.513393_-0.124556@1300740719","lat":51.5133934021,"lng":-0.1245559976},{"id":"SG_4luyHFi5R2f1w3cpjT61ik_51.513393_-0.124556@1300740719","lat":51.5133934021,"lng":-0.1245559976},{"id":"SG_0pEvrpt7bs42jPAxFSrquC_51.512264_-0.124413@1300740807","lat":51.5122642517,"lng":-0.1244129986},]}

这是原始格式:

[ {         :id => "SG_2Km6LX3tEcFwx24eotTHIY_51.513016_-0.123721@1300740411",
            :name => "French Connection Group Plc",
             :lat => 51.5130157471,
             :lng => -0.1237210035
}]

【问题讨论】:

  • 当您说您有大约 80 条记录时,这些记录是否在哈希数组/列表中?
  • 嘿,我将在上面进行编辑以显示!谢谢!
  • 返回值是JSON格式,需要解析才能作为hash使用。
  • 嘿,我做到了!谢谢!对不起1

标签: ruby hash compare


【解决方案1】:

您可以从返回的值中收集有效 ID 的列表,例如:

valid_ids = returned["points"].collect { |point| point["id"] }

然后,您可以使用以下内容从原始值中删除无效值:

original.delete_if { |entry| !valid_ids.include? entry[:id] }

【讨论】:

  • 嗨,我收到了 delete_if igeolise.rb:58:in []': can't convert Symbol into Integer (TypeError) from igeolise.rb:58:in block in []': can't convert Symbol into Integer (TypeError) from igeolise.rb:58:in block in
    ' from igeolise.rb:58:in delete_if' from igeolise.rb:58:in
    '
  • 上面的delete_if 假设original 是一个哈希数组。听起来original 中的条目是数组而不是散列,这会导致您在将[:id] 用作数组的索引(只有Integer 索引)时看到的错误。仔细检查原件的格式,如果原件与问题中当前发布的一样,这应该可以工作。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-09-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多