【问题标题】:Ruby pushing to a hashRuby 推送到哈希
【发布时间】:2017-01-04 21:06:58
【问题描述】:

我有一个由两部分组成的问题,如果它令人困惑,我提前道歉。我正在尝试将用户输入放入一个空的哈希中。我知道你使用

第二部分:假设我只是循环他们相同的问题,直到满足条件。用户输入将成为价值。有没有办法让密钥根据用户输入自动更改?所以它看起来像: {str1 => "示例字符串", str2 => "示例字符串2", str3 => "示例字符串3"}

或者有没有办法让 ruby​​ 自己分配一个键?

如果第二部分令人困惑,再次抱歉。我知道数组会更好,但我正在处理的小挑战是要求哈希。

【问题讨论】:

  • 我的问题是您为什么要将其存储在哈希中?看来您并不真正关心密钥,为什么不将值存储在数组中?
  • 关于您的第二个问题,如果用户提供了带有唯一数字部分的arr = ["cat9", "dog12"],您可以编写如下内容:my_hash = arr.each_with_object({}) { |s,h| h["str#{ s[/\d+\z/] }"] = s } #=> {"str9"=>"cat9", "str12"=>"dog12"}。关于您的第一个问题,您可以在类Hash 上定义一个方法<<,该方法将以您想要的方式运行:class Hash; def <<((k,v)); self[k] = v; end; end。然后对于上面的哈希my_hashmy_hash << ["str40", "pig40"]; hash #=> {"str9"=>"cat9", "str12"=>"dog12", "str40"=>"pig40"}
  • 欢迎来到 Stack Overflow。你可以改进你的问题。请阅读How to Ask,包括“如何以聪明的方式提问”链接。

标签: ruby hash


【解决方案1】:

好的,它不是数组,所以 '

你应该使用这个:

your_hash = {}
hash_key = "x"
hash_value = "y"
your_hash[:hash_key] = hash_value

就是这样。

【讨论】:

    【解决方案2】:

    如果您不关心键的索引,因为哈希本质上是键/值存储,您可能需要Set

    require 'set'
    
    set = Set.new
    
    set << gets.chomp
    

    集合就像无键散列,它是事物的无序集合,但附带的好处是可以快速查找集合中的元素并且它们也自动唯一,将相同的事物添加两次没有任何效果。

    这里的替代方法是在 Hash 中放置一些东西,其中值作为键,任何其他值作为占位符:

    values = { }
    
    values[input.gets] = true
    

    这类似于 Set,但如果您不关心值,使用起来可能效率较低。

    【讨论】:

      【解决方案3】:

      另一种将元素添加到 ruby​​ 哈希 store(key, value)

      hash = {}
      hash.store("first", 42)
      hash #=> {"first"=>42}
      

      【讨论】:

        【解决方案4】:

        以下是添加到Hash 的两种方法

        hash[str1] = "example string"
        hash.merge!(str1 => "example string")
        

        【讨论】:

          【解决方案5】:

          对于数组,您可以使用 &lt;&lt; 推送单个元素。

          使用散列,您跟踪的不是一个元素,而是两个(键和值)。

          例如:

          my_key = "foo"
          my_val = "bar"
          my_hash = {}
          my_hash[key] = val
          

          当然,您可以循环执行此操作。

          我会推荐 RubyMonk 了解更多关于此的信息,但他们的网站已关闭。所以我可以推荐this gist,它展示了一些示例,或者只是阅读任何 ruby​​ 教程的 Hash 部分。

          【讨论】:

            猜你喜欢
            • 2016-05-16
            • 1970-01-01
            • 2014-03-03
            • 1970-01-01
            • 1970-01-01
            • 2012-03-26
            • 2011-07-22
            • 1970-01-01
            • 2017-02-19
            相关资源
            最近更新 更多