【问题标题】:Create or append to array in Ruby在 Ruby 中创建或附加到数组
【发布时间】:2012-08-23 05:14:55
【问题描述】:
foo ||= []
foo << :element

感觉有点笨重。有没有更惯用的方式?

【问题讨论】:

  • 的惯用方式。你可以把它写成(foo ||= []) &lt;&lt; :element,但我觉得它更丑。
  • IMO 正确的方法是拥有初始值。如果你有 ||= 和

标签: ruby arrays


【解决方案1】:
(foo ||= []) << :element

但是嗯。保持可读性真的那么麻烦吗?

【讨论】:

  • +1 表示“保持可读性真的那么繁重吗?”可读性为王。
  • 如果foo 本身是一个更复杂的表达式,例如在其中查找值的(嵌套)散列,这是避免多次查找值或花费另一个变量的好方法查找的数组值。
【解决方案2】:

您也可以随时在任何数组上使用 push 方法。我更喜欢它。

(a ||= []).push(:element)

【讨论】:

    【解决方案3】:

    您也可以从Kernel#Array 中受益,例如:

    # foo = nil
    foo = Array(foo).push(:element)
    # => [:element]
    

    这具有展平潜在数组的好处,例如:

    # foo = [1]
    foo = Array(foo).push(:element)
    # => [1, :element]
    

    【讨论】:

    • foo 未定义时,我不确定在Ruby 中是否始终保证foo = foofoo 设置为nil。此外,Kernel#Array 不会变平 foo。如果它是一个数组,它只会返回 foo
    【解决方案4】:

    为了可读性和没有条件,也更详细一点:

    foo = Array(foo) << :element
    

    【讨论】:

      猜你喜欢
      • 2014-05-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-06-02
      • 2010-11-17
      • 2019-08-22
      • 2013-06-30
      • 2016-11-20
      相关资源
      最近更新 更多