在某些情况下将值插入数组

时间:2018-10-11 09:44:23

标签: ruby

在某些情况下如何向数组内联添加值?

此示例:

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

添加nil,但是,我不想添加任何内容:

["aaa"]

3 个答案:

答案 0 :(得分:3)

您要么这样做:

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

或:

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

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

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

答案 1 :(得分: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]

答案 2 :(得分:1)

当条件为false时,您可以连接一个空数组,这实际上不执行任何操作:

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