【问题标题】:How can I most efficiently iterate over a hash of hashes in order based on key value in inner hash?如何根据内部散列中的键值最有效地迭代散列散列?
【发布时间】:2012-08-17 08:32:23
【问题描述】:

我有一个网站 API 返回的 JSON 哈希值,我想根据内部哈希值中的特定键值对其进行解析和显示。

我可以想到可以实现此目的的解决方案,但它们会占用大量代码并且看起来效率不高。当然,在 Rails 中必须有一种本地方式,因为重点是约定优于配置。我用谷歌搜索了一下,但没有找到任何涵盖此问题的内容。

来自 API 的示例响应:

[{"banner":"01197271","birthday":"1991-01-11","committee_id":1,"created_at":"2012-08-08T01:56:02-05:00","email":"me@example.com","first_name":"Dan","graduation_date":"May 2013","hometown":"San Antonio","hours_enrolled":15,"id":2,"image":{"url":null,"thumb":{"url":null},"large":{"url":null}},"invitation_accepted_at":null,"invitation_limit":null,"invitation_sent_at":null,"invitation_token":null,"invited_by_id":null,"invited_by_type":null,"last_name":"Tester","local_apt":"","local_city":"San Antonio","local_state":"Texas","local_street":"One UTSA Circle","local_zip":"78249","major":"Computer Science","permanent_apt":"","permanent_city":"","permanent_state":"","permanent_street":"One UTSA Circle","permanent_zip":"","phone":"5558813284","same_address":true,"tour_trained":false,"updated_at":"2012-08-17T03:35:26-05:00","utsa_id":"uoi431"},
{"banner":"","birthday":"1990-10-25","committee_id":null,"created_at":"2012-08-03T16:19:23-05:00","email":"you@example.com","first_name":"Test","graduation_date":null,"hometown":null,"hours_enrolled":null,"id":1,"image":{"url":null,"thumb":{"url":null},"large":{"url":null}},"invitation_accepted_at":null,"invitation_limit":null,"invitation_sent_at":null,"invitation_token":null,"invited_by_id":null,"invited_by_type":null,"last_name":"User","local_apt":"","local_city":"","local_state":"","local_street":"","local_zip":"","major":null,"permanent_apt":"","permanent_city":"","permanent_state":"","permanent_street":"","permanent_zip":"","phone":"","same_address":false,"tour_trained":false,"updated_at":"2012-08-15T10:05:54-05:00","utsa_id":""}]

潜在的解决方案是遍历每个内部散列,确定相关键值的值,然后根据键值与已测试散列相比的位置进行存储。完成后返回。

【问题讨论】:

  • 发布您的一些解决方案以及该 API 响应的示例。
  • 如你所愿,@SergioTulentsev。
  • 已添加请求,但我不相信具体细节与有效解决方案相关,因为我在处理此类问题时要求最佳实践。
  • 创建一个ActiveResource对象并为其添加相关方法。
  • 自然语言有歧义。代码不是。只是说。

标签: ruby-on-rails json hash-of-hashes


【解决方案1】:

好的,如果您有设置为解析此信息的对象,这些对象可以根据您的哈希参数构建自己。所以你可以做这样的事情

object = MyObject.create(your_hash_parameters)

your_hash_parameters 是您在示例中提供的参数。

我不确定如果参数数量多于您的对象知道如何处理的参数,它是否仍会自行构建会发生什么。如果是这种情况,您可以使用delete_if 方法来排除不需要的属性。

另外请注意,如果这不是您想要保存到数据库中的内容,它只是用于显示临时信息。我会用attr_accessors 建立一个模型,代表您正在显示的属性。

【讨论】:

  • 谢谢@Trip。我应该考虑为此使用数据库。
  • 对,还请注意,您在技术上不需要使用数据库。它们可以只是临时属性访问器,代表您要解析数据的属性。 (最后一段)
【解决方案2】:

正如评论中所说,我会创建一个 ActiveResource 对象并向其添加相关方法。

【讨论】:

    猜你喜欢
    • 2015-02-03
    • 2011-02-03
    • 2013-06-17
    • 2021-11-03
    • 2015-01-26
    • 2014-01-08
    • 1970-01-01
    • 1970-01-01
    • 2019-11-25
    相关资源
    最近更新 更多