在某些情况下如何向数组内联添加值?
此示例:
["aaa", ("bbb" if false)]
# => ["aaa", nil]
添加nil
,但是,我不想添加任何内容:
["aaa"]
答案 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"]