【问题标题】:generating hash with range and nil as keys以 range 和 nil 作为键生成哈希
【发布时间】:2012-01-05 10:46:29
【问题描述】:

我想创建如下所示的哈希:

{nil => "Cat", 0 => "Dog", 1 => "1", ... 16 => "16"}

这就是我的做法:

hash = { nil => "Cat",0 => "Dog" }
(1..16).to_a.each { |e| hash[e] = e.to_s }

而且这看起来很丑。有没有更好的方法来实现这一点(在 1.8.7 版中)?

谢谢

【问题讨论】:

  • 只是出于好奇:为什么要使用nil 作为键?特别是因为哈希的其余部分在我看来很像一个数组。
  • @polarblau - 我将此哈希用于模型属性的选择框选项,因此当用户未选择任何内容时,它将在 DB 中保留 nil
  • 我不明白这个问题。可以请你清除它吗?你需要什么作为输出?
  • @Shamithc 我正在寻找一种可以以更性感的方式执行此操作的方法 :) 我的代码看起来很糟糕,我知道这有什么用,但没想到。
  • 您是否使用 Rails 的表单助手进行选择?如果是这样,您可以为选项提供 promptinclude_blank 参数。两者都允许您指定一个字符串以进行自定义(在您的示例中为“Cat”)。此处解释了两者之间的区别:apidock.com/rails/ActionView/Helpers/FormOptionsHelper/… — 鉴于我了解您的问题,这对我来说似乎最性感,因为您已经在使用 Rails。

标签: ruby-on-rails ruby


【解决方案1】:

怎么样:

(1..16).inject({nil => "Cat", 0 => "Dog"}) { |a, i| a[i] = i.to_s; a }

这适用于 1.8.7 和 1.9.2。

【讨论】:

    【解决方案2】:

    这不是case的情况吗?

    x = 2
    res = case x
            when nil   then "cat"
            when 0     then "dog"
            when 1     then "1"
            when 1..16 then x.to_s*2 
          end
    p res #=> "22"
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2011-07-01
      • 2012-07-22
      • 2018-06-18
      • 2021-12-07
      • 1970-01-01
      • 2012-11-19
      • 2015-07-27
      相关资源
      最近更新 更多