【问题标题】:Inserting a value into an array under some condition在某些条件下将值插入数组
【发布时间】:2019-03-16 08:31:27
【问题描述】:

如何在某些条件下向内联数组添加值?

这个例子:

["aaa", ("bbb" if false)]
# => ["aaa", nil]

添加nil,但是,我不想添加任何东西:

["aaa"]

【问题讨论】:

  • ["aaa", ( "bbb" if false), ('ccc' if true)].compact ?
  • @kiddorails 通常会损坏允许nils 的数组。
  • ["aaa"].tap { |arr| arr << "bbb" if false }.
  • 谢谢,这就是我要找的
  • @AlekseiMatiushkin 同意 :)

标签: ruby


【解决方案1】:

你要么这样做:

["aaa", ("bbb" if false)].compact

或:

["aaa", *("bbb" if false)]

但是当你使用第二个选项时要小心某些类,因为它可能会弄乱某些类的对象。例如,哈希将被转换为数组:

["aaa", *({b: :b} if true)]
# => ["aaa", [:b, :b]]

【讨论】:

  • *("bbb" if false) 到底是什么意思 *,你能发送链接来描述这个符号吗?
  • 这就是所谓的splat。您可以阅读my answer to another question 以供参考。
【解决方案2】:

我什至会将此作为答案发布,因为这是完成此任务的最简洁明了的方式。

["aaa"].tap { |arr| arr << "bbb" if false }

以更通用和易于遵循的方式:

input = [42]
to_add = {true: :true, false: :false}

to_add.each do |needed, value|
  input.tap { |arr| arr << value if needed }
end
#⇒ [42, :true]

【讨论】:

    【解决方案3】:

    当条件为假时,你可以连接一个空数组,这基本上什么都不做:

    ["aaa"] + (1==1 ? ["foo"] : [])
     => ["aaa", "foo"]
    ["aaa"] + (1==2 ? ["foo"] : [])
     => ["aaa"]
    

    【讨论】:

      猜你喜欢
      • 2019-04-30
      • 1970-01-01
      • 1970-01-01
      • 2018-06-23
      • 1970-01-01
      • 2019-01-29
      • 2015-10-21
      • 2022-01-06
      • 1970-01-01
      相关资源
      最近更新 更多