【问题标题】:Need Ruby method to convert an array of strings into a Hash需要 Ruby 方法将字符串数组转换为 Hash
【发布时间】:2016-08-31 12:24:35
【问题描述】:

我需要 Ruby 方法将字符串数组转换为 Hash,其中每个键都是一个字符串,每个值都是原始数组中字符串的 1 索引索引。

hashify(%w(a b c)) 
# should return 
{'a' => 1, 'b' => 2, 'c' => 3}

【问题讨论】:

  • 到目前为止你做了什么?
  • 我觉得你错过了学习 ruby​​ 语言的宝贵机会。
  • 您是否可能在许多地方重复使用此功能?我还可以考虑将方法命名为更能描述其用途的名称,to_hash_one_indexed,因为这似乎是非常具体的功能。
  • 请阅读“How to Ask”、“minimal reproducible example”和meta.stackoverflow.com/q/261592/128421。我们期待看到您的努力。
  • @铁皮人:我已经访问了你提供的所有链接,并会以适当的格式提出问题并提及我所做的事情

标签: ruby


【解决方案1】:

即使我认为我在帮助别人做功课,我还是忍不住要挥杆挥杆,因为 Ruby 很棒:

%w(a b c).each.with_index(1).to_h

此外,定义“hashify”非常不像 Ruby。我会建议替代方案,但无论如何这可能是一项家庭作业,而您似乎不想学习它。

【讨论】:

    【解决方案2】:
    def hashify(array)
      array.each.with_index(1).to_h
    end
    
    hashify(%w(a b c))
    #=> { "a" => 1, "b" => 2, "c" => 3 }
    

    【讨论】:

    • (微不足道,但 OP 表示他们希望它是 1-indexed。)
    【解决方案3】:

    (显然)有多种方法可以在 Ruby 中实现您的目标。

    如果您考虑表达式%w(a b c).map.with_index(1).to_h,您可以看到这是将Enumerable 类提供给我们的一些方法串在一起的问题。

    通过首先将:map 消息发送到数组,我们会收到一个Enumerator,它为我们提供了方便的:with_index 方法。正如您在文档中看到的,with_index 接受参数中的偏移量,因此将索引偏移 1 就像将 1 作为参数传递给 :with_index 一样简单。

    最后,我们在枚举器上调用:to_h 来接收所需的哈希。

    # fore!
    def hashify(array) 
      array.map.with_index(1).to_h
    end
    > hashify %w(a b c)
    => {"a"=>1, "b"=>2, "c"=>3}
    

    【讨论】:

    • (微不足道,但 OP 表示他们希望它是 1-indexed。)
    • 误读了问题,但感谢您的审查。我知道 arg 但忽略了细节。干杯。
    • 虽然此代码可能会回答问题,但提供有关 why 和/或 如何 回答问题的额外上下文将显着改善其长期价值。请edit你的答案添加一些解释。
    【解决方案4】:

    试试这个,这将在Array 类中添加一个方法to_hash_one_indexed

    class Array
      def to_hash_one_indexed
        map.with_index(1).to_h
      end
    end
    

    然后调用它:

    %w(a b c).to_hash_one_indexed
    #=> {"a"=>1, "b"=>2, "c"=>3}
    

    【讨论】:

    • Array#to_h 已定义。重写 Ruby 核心方法可能是个坏主意...
    • (微不足道,但 OP 表示他们希望它是 1-indexed。)
    猜你喜欢
    • 1970-01-01
    • 2014-10-16
    • 1970-01-01
    • 2011-12-23
    • 1970-01-01
    • 2011-06-22
    • 1970-01-01
    • 2015-09-04
    • 2013-12-16
    相关资源
    最近更新 更多