【问题标题】:Ruby: including a hash inside another hashRuby:在另一个哈希中包含一个哈希
【发布时间】:2012-05-15 07:29:44
【问题描述】:

我有以下哈希:

EMAIL_PWD_HASH = Hash.new
EMAIL_PWD_HASH[ "email" ] =  { "label" => EMAIL_STR, "type" => "email_field" }
EMAIL_PWD_HASH[ "password" ] = { "label" => PWD_STR, "type" => "password_field" }

以及以下哈希:

NEW_USER_HASH = Hash.new
NEW_USER_HASH[ "first" ] = { "label" => FIRST_STR, "type" => "text_field" }
NEW_USER_HASH[ "last" ] =  { "label" => LAST_STR, "type" => "text_field" }

NEW_USER_HASH[ "title" ] =  { "label" => TITLE_STR, "type" => "text_field" }
NEW_USER_HASH[ "bio" ] =  { "label" => BIO_STR, "type" => "text_field" }

我想在最后一个和 bio 之前添加电子邮件和密码到 NEW_USER_HASH。添加 EMAIL_PWD_HASH 的语法是什么(顺序很重要)?

【问题讨论】:

  • 你想做什么,顺序很重要?

标签: ruby hash


【解决方案1】:
NEW_USER_HASH.merge!(EMAIL_PAD_HASH)

另请注意,ruby 中的哈希是没有顺序的。

【讨论】:

  • @DaveNewton:它们是保序的,但它们仍然不能很好地支持排序,而且通常认为依赖于哈希排序是一个坏主意。
  • 我不打算重新订购,但我假设它们是保留订单的。这将在表单中使用(作为示例)。
  • @Chuck 从 Ruby 1.9 开始,您可以依赖排序。另一种方法是重新实现现有功能,因为在大多数用例中插入顺序很重要。他们支持他们支持的排序,只是不支持其他排序或重新排序。
  • @Doug R:他说他想在 NEW_USER_HASH 之后和 bio 之前添加电子邮件和密码
  • 当我添加它时,它确实保留了插入点之前和之后的顺序。
【解决方案2】:

我不知道如何按照您的要求进行操作,并且我怀疑这是否可行,但这是一种快速而肮脏的方法来满足您的需求:

NEW_USER_HASH['email']    = EMAIL_PWD_HASH['email']
NEW_USER_HASH['password'] = EMAIL_PWD_HASH['password']
NEW_USER_HASH['bio']      = NEW_USER_HASH.delete('bio')  # deletes bio and reinsert in the end

emailpassword 现在在 last 之后和 bio 之前,正如你所问的。 :)

【讨论】:

    猜你喜欢
    • 2011-04-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-07-15
    • 1970-01-01
    • 2013-07-21
    • 2011-11-26
    相关资源
    最近更新 更多